Rails ActiveRecord查找用户产品等于0的位置

时间:2013-06-11 21:23:31

标签: mysql ruby-on-rails ruby-on-rails-3 activerecord

我有一个型号用户has_many产品,但有些用户还没有任何产品。我想写一个查询,它给了我所有当前没有任何产品的用户,即产品为0的用户。

我能想到的唯一方法是非常难看。例如,获取所有用户(User.all),然后遍历所有用户并检查@ user.products<谢谢你的帮助。

1 个答案:

答案 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列表中的所有用户。