我有一个模型设置,其中艺术家通过相册有很多类型。我正试图从属于艺术家的所有专辑中获得最多的类型。
我已成功使用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
答案 0 :(得分:0)
find
不适用于你拥有的东西。
使用.first
代替.limit(1)
,即使用genres.group("genres.id").order("count(genres.id) DESC").first
,唯一稍微更惯用的方法就是使用,
{{1}}
[OP评论后编辑]
答案 1 :(得分:0)
您可以为每位艺术家缓存顶级类型:
top_genre
然后你只需使用top_genre属性而不是group_by和count查询。