在 Rails 3 中,您可能会遇到需要从模型中检索数据并根据关联数量对结果进行排序的场景另一个模型中的关联记录。这可以使用 ActiveRecord 的命名范围来实现。
考虑具有许多关联监听记录的模型歌曲示例。要查找最常听的五首歌曲,您可以使用命名范围方法:
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) # Retrieve the top 5 songs based on listen count Song.top5
在此命名范围中,我们使用 select 方法来包含感兴趣的列以及自定义列Listens_count 列表示监听计数。 joins 方法建立了 Song 和 Listen 模型之间的关联。 group 方法按 Song.id 对结果进行分组,以聚合每首歌曲的收听次数。最后,order 和 limit 方法按收听次数降序对结果进行排序,并将输出限制为前五首歌曲。
以上是如何在 Rails 3 中按关联计数对 ActiveRecord 结果排序?的详细内容。更多信息请关注PHP中文网其他相关文章!