我有一个叫Song
的模特.我还有一个名为Listen
的模型.一首Listen
belongs_to :song
和一首歌:has_many listens
(可以听很多次).
在我的模型中,我想定义一个方法self.top
,它应该返回听得最多的前5首歌曲.如何使用has_many
关系实现这一点?
我使用的是Rails 3.1.
谢谢
我有一个叫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