Rails WHERE查询has_many关系是否有效?

时间:2016-09-01 10:09:43

标签: ruby-on-rails ruby postgresql activerecord

干杯! 假设我User has_manyAccounts模型有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

为什么?

1 个答案:

答案 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帐户,但不一定全部。