需要ActiveRecord分组/计数查询帮助

时间:2010-12-16 21:35:37

标签: ruby-on-rails activerecord count group-by

我正在使用Rails 3。

假设我有以下原型模型:博客,帖子,评论,类别。 Blog has_many posts,post has_many comments和belongs_to category。

我想知道每个类别中有多少帖子,但只计算那些有评论的帖子。

如果我执行以下操作:

blog.posts.group("category_id").count

- 这给了我一个接近我需要的OrderedHash但当然问题是计数值包括没有评论的帖子。

如果我这样做:

blog.posts.group("category_id").joins("comments").count

- 这为我提供了该类别帖子中的评论数量(如果我在分组之前放置了联接,它会做同样的事情。)

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

给'尝试'。只是快速地将它们整合在一起......

Post.select("posts.id, posts.category_id, count(comments.id)").join(:comments).group('posts.category_id').having('count(comments.id) > 0')

这会转化为......

select posts.id, posts.category_id, count(comments.id) from posts join comments on posts.id = comments.post_id group by posts.category_id having count(comments.id) > 0

可能需要对此进行一点点迭代...

答案 1 :(得分:0)

有助于保持查询简单易读的简单选项是在评论后关联中设置counter_cache,这样您就可以在查找中添加where("comments_count > 0")