我有两个模型:帖子和评论。我想按照今天添加的评论数量对帖子进行排名。到目前为止,我只按评论数量排名,不知道如何添加今天的部分。
这是帖子控制器:
@posts = Post.order('posts.comments_count desc')
我试过了
@posts = Post.order('posts.comments_count desc').where("created_at >= ?", Time.zone.now.beginning_of_day)
但是没有返回。
答案 0 :(得分:3)
您的第二个问题是为您提供今天创建的帖子的数量,而不是今天创建的评论数量。
这应该是您正在寻找的:
@posts = Post.select('posts.*, count(comments.id) as count_comments')
.joins(:comments)
.where('comments.created_at >= ?', Time.zone.now.beginning_of_day)
.group('posts.id')
.order('count_comments desc')
如果您想要包含所有帖子,包括今天没有评论的帖子,那么您需要left join
:
@posts = Post.select('posts.*, count(comments.id) as count_comments')
.joins("left join comments on comments.post_id = posts.id and comments.created_at >= '#{Time.zone.now.beginning_of_day}'")
.group('posts.id')
.order('count_comments desc')