0

has_many 製品を持つモデル ユーザーがいますが、一部のユーザーはまだ製品を持っていません。現在製品を持っていないすべてのユーザー、つまり製品が 0 のユーザーを取得するクエリを作成したいと考えています。

これを行うために私が考えることができる唯一の方法はかなり醜いです。たとえば、すべてのユーザー (User.all) を取得してから、すべてのユーザーを反復処理し、@user.products < 1 をチェックします。助けてくれてありがとう。

4

1 に答える 1

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テーブル内のすべての を取得し、このs リストproductsにないすべてのユーザーを選択します。user_id

于 2013-06-11T21:26:57.473 に答える