0

has_many user_entitlements のモデル ユーザーがあります。プレビュー属性があり、ユーザー資格がないすべてのユーザーを取得したいと考えています。

私のコードは現在:

User.where("preview is not null").keep_if {|user| user.user_entitlements.empty?}

これは、すべてのユーザーを反復処理し、ユーザー資格があるかどうかを確認しています。

SQL でこれを実行して、より効率的にし、各ユーザーを経由する必要がないようにする方法はありますか?

4

2 に答える 2

1

Arel を使用して、を活用したクエリを作成できますNOT EXISTS

user_arel = User.arel_table
ue_arel = UserEntitlement.arel_table
User.where("preview is not null").where(
  UserEntitlement.where(ue_arel[:user_id].eq(user_arel[:id])).exists.not
)

UserEntitlement列を含むスキーマを想定していuser_idます。

于 2013-05-01T16:33:21.950 に答える