Ruby on rails 查询上有多个关系工作的Rails不正确?
干杯! 假设我有Ruby on rails 查询上有多个关系工作的Rails不正确?,ruby-on-rails,ruby,postgresql,activerecord,Ruby On Rails,Ruby,Postgresql,Activerecord,干杯! 假设我有用户,其中有许多帐户,帐户模型有登录(布尔)字段 我写了一个AR查询: User.joins(:accounts).where(accounts:{logged\u in:false}),对吗 然后我检查它User.joins(:accounts).where(accounts:{logged\u-in:false}).first.accounts.pull(:logged\u-in) 并且可以看到有一些帐户具有mobiles.logged_in=true值 (0.1ms) S
用户
,其中有许多帐户
,帐户
模型有登录(布尔)
字段
我写了一个AR查询:
User.joins(:accounts).where(accounts:{logged\u in:false})
,对吗
然后我检查它User.joins(:accounts).where(accounts:{logged\u-in:false}).first.accounts.pull(:logged\u-in)
并且可以看到有一些帐户具有mobiles.logged_in=true
值
(0.1ms) SELECT "accounts"."logged_in" FROM "accounts" WHERE "accounts"."user_id" = $1 [["user_id", 373]]
false
false
true
为什么?
获取所有至少有一个帐户的用户,该帐户的登录=false
这是因为它被翻译成(大致):
问题是当你这么做的时候
User.joins(:accounts).where(accounts: { logged_in: false }).first.accounts
实际上,您正在为找到的第一个用户(无论是否登录)重新获取所有帐户。
此用户至少有一个未登录帐户,但不一定全部。手机不同于帐户,对吗?@ollpu对不起,我指的是帐户,这不是错误的来源problem@Nikita-它工作得很好。试着想想。当您根据相同的条件查找用户时,为什么您希望该用户只登录了错误的帐户。它只是一个user
对象user.joins(:accounts).where(accounts:{logged\u in:false})。首先到这里。然后对其调用accounts
,将返回与其关联的所有帐户。
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