首页 >数据库 >mysql教程 >如何使用 has_many 查找 Rails 3 中前 N 个最相关的记录?

如何使用 has_many 查找 Rails 3 中前 N 个最相关的记录?

DDD
DDD原创
2024-11-28 04:54:11885浏览

How to Find the Top N Most Associated Records in Rails 3 using has_many?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn