给定用户&身份验证模型 - 如何返回没有Authentication.provider =“facebook”的所有用户

时间:2011-12-22 18:23:51

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

我有两种模式:

User (id)
Authentication (id, provider,..)

如何让所有没有authentication.provider eq的用户获得“facebook”?

由于

class Authentication < ActiveRecord::Base
  belongs_to :user    
end

class User < ActiveRecord::Base
    has_many :authentications

3 个答案:

答案 0 :(得分:2)

User.joins("LEFT JOIN authentications ON authentications.user_id = users.id AND authentications.provider = 'facebook'").where("authentications.user_id IS NULL")

让我解释一下=&gt; authentications.user_id IS NULL将为您提供don't从Facebook

进行相应身份验证的所有用户

答案 1 :(得分:2)

<强> UPD。请参阅Octopus-Paul's answer以获得更好的解决方案。

我想,它看起来像这样:

User.joins(:authentications).where("authentications.provider != 'facebook'")

答案 2 :(得分:0)

User.select("DISTINCT users.*").joins("LEFT JOIN authentications ON authentications.user_id = users.id").where("authentications.provider != 'facebook'")

你应该在这里使用LEFT JOIN,因为有了它,查询也会返回没有任何身份验证的用户(即没有facebook身份验证的用户也是没有任何身份验证的用户)