干杯!
假设我有User那个has_manyAccountsAccount模型有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/

10-13 02:12