干杯!
假设我User
has_many
,Accounts
模型有Account
字段,我logged_in (boolean)
。
我写了一个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
为什么?
答案 0 :(得分: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
您实际上正在为您找到的第一个用户重新获取所有帐户,login_in与否。
此用户至少拥有一个NOT logged_in
帐户,但不一定全部。