【发布时间】:2013-06-12 06:38:44
【问题描述】:
我有一个拥有_many 产品的模型用户,但有些用户还没有任何产品。我想编写一个查询,为我提供当前没有任何产品的所有用户,即产品为 0 的用户。
我能想到的唯一方法是非常丑陋。例如,获取所有用户(User.all),然后遍历所有用户并检查@user.products
【问题讨论】:
标签: mysql ruby-on-rails ruby-on-rails-3 activerecord
我有一个拥有_many 产品的模型用户,但有些用户还没有任何产品。我想编写一个查询,为我提供当前没有任何产品的所有用户,即产品为 0 的用户。
我能想到的唯一方法是非常丑陋。例如,获取所有用户(User.all),然后遍历所有用户并检查@user.products
【问题讨论】:
标签: mysql ruby-on-rails ruby-on-rails-3 activerecord
这应该可以解决问题:
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)
它检索products 表中的所有user_ids 并选择不在此user_ids 列表中的所有用户。
【讨论】: