我有一个名为Song
的模型。我也有一个名为Listen
的模型。 Listen
belongs_to :song
和歌曲:has_many listens
(可以收听很多次)。
在我的模型中,我想定义一个self.top
方法,该方法应该返回听最多的前5首歌曲。如何使用has_many
关系实现这一目标?
我正在使用Rails 3.1。
谢谢!
最佳答案
使用named scopes:
class Song
has_many :listens
scope :top5,
select("songs.id, OTHER_ATTRS_YOU_NEED, count(listens.id) AS listens_count").
joins(:listens).
group("songs.id").
order("listens_count DESC").
limit(5)
Song.top5 # top 5 most listened songs
关于mysql - Rails 3 ActiveRecord:按关联计数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8696005/