2016-09-01 8 views
1

乾杯! のは、私はUserことhas_manyAccountsがあるとしましょう、Accountモデルはlogged_in (boolean)フィールドがあります。Rails where_many関係のWHEREクエリは正しく動作しませんか?

私はARクエリ: User.joins(:accounts).where(accounts: { logged_in: false })を書いていますか?

しかし、私はそれをチェックしますUser.joins(:accounts).where(accounts: { logged_in: false }).first.accounts.pluck(:logged_in) そして、mobiles.logged_in = true値を持ついくつかのアカウントがあることが分かりました。

(0.1ms) SELECT "accounts"."logged_in" FROM "accounts" WHERE "accounts"."user_id" = $1 [["user_id", 373]] 
false 
false 
true 

なぜですか?

+1

'mobiles'は右、accounts''異なるのですか? – ollpu

+0

は@ollpu申し訳ありませんが、タイプミスということは、私は 'accounts'を意味し、それが問題 – xamenrax

+0

@Nikitaのソースではない - これは完璧に動作します。試してみてください。同じ条件に基づいてユーザーを見つけただけで、そのユーザーにはfalse_login_inアカウントしか持たないのがなぜでしょうか。これは単なる 'user'オブジェクトの' User.joins(:accounts).where(accounts:{logged_in:false})です。そして 'accounts'を呼び出すと、それに関連する' all'アカウントが返されます。 –

答えて

1
User.joins(:accounts).where(accounts: { logged_in: false }) 

logged_in == false少なくともつのアカウントを持つすべてのユーザーを取得します。
それは(おおよそ)に変換されますのでです:

SELECT users.* 
FROM users 
INNER JOIN accounts 
WHERE users.id = accounts.user_id 
    AND NOT accounts.logged_in 

問題は、あなたが

User.joins(:accounts).where(accounts: { logged_in: false }).first.accounts 

を行うときに、あなたが実際に最初のユーザーのためにすべてのアカウントを再フェッチしているということです見つけたか、logged_inかどうか。
このユーザーには少なくとも1つのNOT logged_inアカウントがありますが、必ずしもすべてである必要はありません。

+0

それは、ありがとう! – xamenrax

関連する問題