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

如何用Impressionist gem统计当前用户帖子的每日总曝光量

嘿,我来帮你捋捋这个问题~你现在的代码逻辑有个小问题:你先调用了sum(&:impressionist_count)把所有帖子的曝光量加总,得到的是一个单一的数值,之后再用group_by_day(:created_at)就完全没用了——单个数值根本没有created_at属性可以用来分组呀!

根据你的需求,我分两种情况给你修正方案:

情况1:统计过去24小时内用户发帖的总曝光量

如果是要直接拿到过去一天里用户所有帖子的曝光总和,代码可以这么写:

def posts_daily_impressions_count(current_user)
  # 先筛选出24小时内创建的帖子
  recent_posts = current_user.posts.where(created_at: 24.hours.ago..Time.current)
  # 数据库层面直接求和,比内存求和更高效
  recent_posts.sum(:impressionist_count)
end

这里用sum(:impressionist_count)而不是sum(&:impressionist_count),是因为前者让数据库直接计算总和,不用把所有帖子加载到Ruby内存里,性能会好很多。

情况2:按天分组统计用户每天发帖的总曝光量

如果你的需求是按日期分组(比如最近一周每天的曝光总量),那应该先分组再求和,代码调整成这样:

def posts_daily_impressions_count(current_user)
  # 先按创建日期分组,再对每组的曝光量求和
  current_user.posts.group_by_day(:created_at).sum(:impressionist_count)
end

这个方法会返回一个哈希,键是日期对象,值是对应日期的总曝光量,比如{ Tue, 10 Oct 2024 => 150, Wed, 11 Oct 2024 => 230 }这样的结构。

另外提醒下:如果impressionist_count不是数据库字段,而是通过impressionist gem动态计算的方法,那你可能需要先预加载关联数据,或者换用其他方式统计,但如果是缓存的字段,上面的代码就完全没问题啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:13:11