使用 '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 和计数查询。