我有两种模式:
User (id)
Authentication (id, provider,..)
如何让所有没有authentication.provider eq的用户获得“facebook”?
由于
class Authentication < ActiveRecord::Base
belongs_to :user
end
class User < ActiveRecord::Base
has_many :authentications
答案 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身份验证的用户也是没有任何身份验证的用户)