干杯!
假设我有User
那个has_many
Accounts
,Account
模型有logged_in (boolean)
字段。
我写了一个应收账款查询: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
为什么?
最佳答案
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
实际上,您正在获取找到的第一个用户的所有帐户,无论是否登录。
此用户至少有一个
NOT logged_in
帐户,但不一定全部都有。关于ruby-on-rails - 在has_many关系上的Rails WHERE查询工作不正确吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39268679/