Rails 3 ActiveRecord 中按关联计数排序记录
在 Rails 3 中,您可以利用 has_many 关联来有效确定最受欢迎的记录基于关联计数。考虑具有关联 Listen 模型的 Song 模型的示例,其中每个 Listen 都属于一首歌曲。
要检索最常听的 5 首歌曲,您可以使用命名范围在 Song 模型中定义一个范围:
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) end
这个作用域结合了命名作用域和关联的力量。它会计算每首歌曲的收听次数,并根据该次数对结果进行降序排序,并将结果集限制为收听次数最多的前 5 首歌曲。
通过利用 top5 范围,您可以方便地获取使用简单查询即可查询最流行的歌曲:
Song.top5 # top 5 most listened songs
以上是如何使用 has_many 查找 Rails 3 中前 N 个最相关的记录?的详细内容。更多信息请关注PHP中文网其他相关文章!