我有用户模型和身份验证模型。 User
has_many
Authentications
。
我想创建一个查询,检查所有具有身份验证的用户名为“Facebook” AND 称为“LinkedIn”的身份验证。
我尝试过加入两次,但这不起作用:
User.joins(:authentications).
where(authentications: {provider: 'facebook'}).
joins(:authentications).
where(authentications: {provider: 'linkedin'})
导致以下查询。似乎其中一个连接被删除了:
SELECT "users".* FROM "users" INNER JOIN "authentications"
ON "authentications"."user_id" = "users"."id"
WHERE "authentications"."provider" = 'facebook' AND "authentications"."provider" = 'linkedin'
修改
这对我有用,但是,我必须两次加入用户表,我不想这样做:
joins(authentications:{ user: :authentications }).where(authentications: {provider: 'facebook'}).where(authentications_users: {provider: 'linkedin'})
答案 0 :(得分:1)
要实现这一点,您确实可以两次加入同一个表。我不确定AR将如何使用符号参数处理两个.joins
调用,但你肯定可以这样做:
User.joins("INNER JOIN authentications AS a1 ON a1.user_id = users.id").
joins("INNER JOIN authentications AS a2 ON a2.user_id = users.id").
where("a1.provider = 'linkedin'").where("a2.provider = 'facebook'")
它最终会制作更低级别的SQL,但这样你就可以得到你需要的东西。