Rails:has_many:如何查询与某些其他对象有连接的对象

时间:2012-11-18 08:54:32

标签: ruby-on-rails ruby-on-rails-3 activerecord

我有用户模型和身份验证模型。 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'})

1 个答案:

答案 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,但这样你就可以得到你需要的东西。