2

假设用户有评论,我希望所有用户都有三个或更多评论。

User.joins(:comments)会给我任何有一个或多个评论的用户。让用户获得至少三条评论的最佳方式是什么?

4

2 回答 2

3

更好的方法可能是使用 API 编写该子查询:

subquery = Comment.select("user_id").
                   group(:user_id).
                   having("COUNT(*) >= 3").to_sql
User.where("id IN (#{subquery})")
于 2013-06-27T16:30:00.433 回答
0

像这样的 SQL:

SELECT users.* FROM users
WHERE EXISTS (SELECT id FROM comments WHERE user_id = users.id GROUP BY user_id HAVING COUNT(*) >= 3)

在 ActiveRecord 表示法中转换为:

User.where('EXISTS (SELECT id FROM comments WHERE user_id = users.id GROUP BY user_id HAVING COUNT(*) >= 3)')
于 2013-06-27T15:54:08.307 回答