我有一个叫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

Mysql相关问答推荐

为什么SQL会打印\\.& '而不是\.'在命令行上?

如何重新采样SQL数据库

正则表达式转换为MYSQL格式

加载数据本地infile,字段中有双引号和逗号

客户跨订阅的跨时间线计数

错误:数据包顺序错误.GET:0预期:10 node JS MySQL

为什么MySQL不考虑在联接中使用(JSON)函数索引,而考虑在生成的列上使用索引?

默认情况下,MariaDB是否限制为本地主机?

MySQL全文索引和不区分大小写搜索带来的挑战

从 NextJS/Prisma 添加用户 ID (FK) 到 MySQL 表

Mysql时间序列数据的最小值和最大值

java.lang.NullPointerException:无法调用com.proj.my.repository.OrderRepository.save(Object),因为this.orderRepository为空

在 MySQL 中跨日期和位置计算和排序实体的共现

Django中的MYSQL查询等效

在 SQL 中的 case 语句之后将新列转换为 INT

从 2 个不同的表中获取数据并将它们加入 sql

如何通过if语句对SQL查询进行排序

使用 ON DUPLICATE KEY 将列增加一定数量 MySQL NodeJS

mysql 5.5;可以从记录中排除表吗?

用户 'User'@'%' 和 'User'@'localhost' 不一样吗?