我有一个简单的rails 3博客应用,其中帖子有很多评论和评论属于帖子。
我想创建一个范围来获取所有超过5条评论的帖子。 没有计数器缓存列,最好的方法是什么。
答案 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)
谢谢!