You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在RoR中用单行代码实现按ID筛选或全量统计查询

Ruby on Rails 单行实现动态筛选与时间差求和

直接利用 Rails where 方法的特性就能实现,不需要用 'all' 这种占位符:

tracks.where(video_id: ids).sum("EXTRACT(EPOCH FROM (updated_at - created_at))")

细节说明:

  • 当 ids 不为 nil 且非空时,where(video_id: ids) 会生成筛选 video_id 匹配值的 SQL 语句;
  • 当 ids 是 nil 或者空数组时,where 会自动忽略这个条件,直接返回所有记录;
  • 时间差计算注意数据库兼容性:age 函数并非所有数据库都支持,PostgreSQL 可以用 EXTRACT(EPOCH FROM (updated_at - created_at)) 获取秒级时间差,MySQL 则用 TIMESTAMPDIFF(SECOND, created_at, updated_at),根据你的数据库类型调整即可。

如果想更明确地处理 nil 判断,也可以写成:

tracks.where(ids.present? ? { video_id: ids } : nil).sum("TIMESTAMPDIFF(SECOND, created_at, updated_at)")

内容的提问来源于stack exchange,提问作者kostyaha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 13:42:23