gpt4 book ai didi

ruby-on-rails - Rails Active Record - counter_cache 仅返回给定时间段内的记录

转载 作者:搜寻专家 更新时间:2023-10-30 23:33:20 24 4
gpt4 key购买 nike

我有一个拥有很多文章的用户。我使用计数器缓存来存储用户曾经发表的文章数量。

class User < ActiveRecord::Base
has_many :articles
end

class Article < ActiveRecord::Base
belongs_to :user, :counter_cache => true
end

我正在使用以下语法查找发表过最多文章的用户:

User.order( "articles_count desc" ).limit(50).all  

我想做的是检查过去一个月发表文章最多的 50 位顶级用户。

我知道我可以像这样获取每个用户上个月发表的文章数量,但感觉效率不高:

User.find_each do |user|
user.articles.where('created_at >= ?', 1.week.ago.utc).count
end

我尝试了一些 SQL 查询,但运气不佳,想知道是否可以使用存储在我的 counter_cache 中的数据来达到这个目的?

最佳答案

这个怎么样:

Article.
includes(:user).
where('created_at >= ?', 1.week.ago.utc).
group(:user).
order("count(*) desc").
limit(50).
count

它给你一个散列,其中键是用户,值是文章数量,对于文章数量排名前 50 的用户,它是按照文章数量降序排列的。

created_at 上放置一个索引,也可能在 user_id 上放置一个索引。

关于ruby-on-rails - Rails Active Record - counter_cache 仅返回给定时间段内的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46004443/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com