我有一个型号用户has_many产品,但有些用户还没有任何产品。我想写一个查询,它给了我所有当前没有任何产品的用户,即产品为0的用户。
我能想到的唯一方法是非常难看。例如,获取所有用户(User.all),然后遍历所有用户并检查@ user.products<谢谢你的帮助。
答案 0 :(得分:3)
这应该可以解决问题:
User.includes(:products)
.select('users.*')
.group('users.id')
.having('COUNT(products.*) = 0')
从我的另一个回答中得出:
编辑#1: 这是另一种解决方案:
User.where('users.id NOT IN (?)', Product.all.pluck(:user_id).uniq.compact)
它检索user_id
表中的所有products
,并选择不在此user_id
列表中的所有用户。