查找超过定义数量的评论的所有帖子

时间:2010-11-30 14:49:03

标签: ruby-on-rails activerecord

我有一个简单的rails 3博客应用,其中帖子有很多评论和评论属于帖子。

我想创建一个范围来获取所有超过5条评论的帖子。 没有计数器缓存列,最好的方法是什么。

3 个答案:

答案 0 :(得分:8)

像这样,也许?

Post.select('posts.*, count(comments.id) as comment_count').
  joins(:comments).
  group('posts.id').
  having('comment_count > 5')

答案 1 :(得分:5)

Postgres 9.1 中,我不得不这样设置,因为postgres不喜欢在计算字段或类似字段上添加条件。

Post.select('posts.*, count(comments.id) as comment_count').
  joins(:comments).
  group('posts.id').
  having('count(comments.id) > 5')

答案 2 :(得分:0)

noodl的答案很好......谢谢你!

我需要找到 - 坚持原始问题的示例类 - 最近评论过的4个帖子...... noodl答案的一个轻微变体就是诀窍:

Post.select('posts.*, max(comments.created_at) as last_commented_at').
  joins(:comments).
  group('posts.id').
  order('last_commented_at DESC').
  limit(4)

谢谢!