我正在使用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
- 这为我提供了该类别帖子中的评论数量(如果我在分组之前放置了联接,它会做同样的事情。)
感谢您的帮助。
答案 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")
。