has_many 製品を持つモデル ユーザーがいますが、一部のユーザーはまだ製品を持っていません。現在製品を持っていないすべてのユーザー、つまり製品が 0 のユーザーを取得するクエリを作成したいと考えています。
これを行うために私が考えることができる唯一の方法はかなり醜いです。たとえば、すべてのユーザー (User.all) を取得してから、すべてのユーザーを反復処理し、@user.products < 1 をチェックします。助けてくれてありがとう。
has_many 製品を持つモデル ユーザーがいますが、一部のユーザーはまだ製品を持っていません。現在製品を持っていないすべてのユーザー、つまり製品が 0 のユーザーを取得するクエリを作成したいと考えています。
これを行うために私が考えることができる唯一の方法はかなり醜いです。たとえば、すべてのユーザー (User.all) を取得してから、すべてのユーザーを反復処理し、@user.products < 1 をチェックします。助けてくれてありがとう。
これでうまくいくはずです:
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