使用 'find' 方法查找项目的最高出现次数
Finding the highest occurrence of an item using the 'find' method
我有一个模型设置,其中艺术家通过专辑拥有多种流派。我正在尝试从属于艺术家的所有专辑中获取出现次数最多的流派。
我已经设法使用 group()
、sort()
和 limit()
方法完成了此操作,但由于我只需要一种类型,因此我想了一种更简洁的方法来完成此操作将使用 find()
。转换我现在拥有的东西的最佳方法是什么?
class Artists < ActiveRecord::Base
has_many :albums
has_many :genres, through: :albums
def common genre
genres.group("genres.id").order("count(genres.id) DESC").limit(1)
end
end
find
不会为你所拥有的工作。
唯一稍微更惯用的方法是使用 .first
而不是 .limit(1)
,即
genres.group("genres.id").order("count(genres.id) DESC").first
[根据 OP 的评论进行编辑]
您可以缓存每个艺术家的热门流派:
- 艺术家中的新专栏 table -
top_genre
- after_create(和after_save)专辑回调,更新当前专辑艺术家top_genre
那么您只需使用 top_genre 属性而不是 group_by 和计数查询。
我有一个模型设置,其中艺术家通过专辑拥有多种流派。我正在尝试从属于艺术家的所有专辑中获取出现次数最多的流派。
我已经设法使用 group()
、sort()
和 limit()
方法完成了此操作,但由于我只需要一种类型,因此我想了一种更简洁的方法来完成此操作将使用 find()
。转换我现在拥有的东西的最佳方法是什么?
class Artists < ActiveRecord::Base
has_many :albums
has_many :genres, through: :albums
def common genre
genres.group("genres.id").order("count(genres.id) DESC").limit(1)
end
end
find
不会为你所拥有的工作。
唯一稍微更惯用的方法是使用 .first
而不是 .limit(1)
,即
genres.group("genres.id").order("count(genres.id) DESC").first
[根据 OP 的评论进行编辑]
您可以缓存每个艺术家的热门流派:
- 艺术家中的新专栏 table -
top_genre
- after_create(和after_save)专辑回调,更新当前专辑艺术家top_genre
那么您只需使用 top_genre 属性而不是 group_by 和计数查询。