我有一个名为的模型Song。我也有一个名为的模型Listen。A Listen belongs_to :song和一首歌:has_many listens(可以收听很多次)。
Song
Listen
belongs_to :song
:has_many listens
在我的模型中,我想定义一个方法self.top,该方法应返回收听次数最多的前5首歌曲。如何使用has_many关系实现这一目标?
self.top
has_many
我正在使用Rails 3.1。
谢谢!
使用命名范围:
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