SQL:このsqlを使って `rails console`と同じクエリを実行するとどうなりますか?
select * from user where room_id not in (select id from rooms);
このSQLを使用したrails console
で同じ同等のクエリは何ですか?
例:(。申し訳ありませんが、この例は正しくありません)
User.all.each { |u| user.room }
SQL:このsqlを使って `rails console`と同じクエリを実行するとどうなりますか?
select * from user where room_id not in (select id from rooms);
このSQLを使用したrails console
で同じ同等のクエリは何ですか?
例:(。申し訳ありませんが、この例は正しくありません)
User.all.each { |u| user.room }
User.where("room_id not in (select id from rooms)")
が、それはかなり速くなりますので、あなたはこれをしたい:
User.where("not exist (select id from rooms where id=users.room_id)")
ていますあなたが得ることができる最も近い。 SQL NOT()
に変換されるActive Recordクエリを作成する方法はないようです。被験者の検索では、ほとんど同じ回答のSOの質問が返されます。
あなたは
User.all.select { |u| !Room.find_by_id(u.room_id) }
ような何かを行うことができますしかし、それは再びあまり効率的である可能性があります。
あなたは、ほぼ文字通りそれを翻訳することができます
User.where('room_id not in (select id from rooms)').all
where
句は、それが受け入れ何で非常に柔軟です。
squeel
gemに精通しているかどうかわかりません。これにより、純粋なRubyコードで非常に複雑なSQLクエリを構築することができます。あなたのケースでは、それは(あなたのGemfileにgem 'squeel'
行を追加してbundle install
を実行しているのafer)次のコードのように簡単でなければなりません:試してみる価値
room_ids = Room.select{id}; User.where{room_id.not_in room_ids}
、そうではありませんか?
ここにはsqueel's pageがあります。
些細でないデータセットで 'User.all'を呼び出すことは非常に危険であり、解決策として提案すべきではありません。 – tadman