假设用户有评论,我希望所有用户都有三个或更多评论。
User.joins(:comments)
会给我任何有一个或多个评论的用户。让用户获得至少三条评论的最佳方式是什么?
假设用户有评论,我希望所有用户都有三个或更多评论。
User.joins(:comments)
会给我任何有一个或多个评论的用户。让用户获得至少三条评论的最佳方式是什么?
更好的方法可能是使用 API 编写该子查询:
subquery = Comment.select("user_id").
group(:user_id).
having("COUNT(*) >= 3").to_sql
User.where("id IN (#{subquery})")
像这样的 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)')