2011-12-22 38 views
0

我有兩個型號:給定用戶和身份驗證模型 - 如何返回所有用戶瓦特/ OA Authentication.provider =「臉譜」

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

我怎樣才能不具有認證的所有用戶。提供商eq到「臉譜」?

感謝

class Authentication < ActiveRecord::Base 
    belongs_to :user  
end 

class User < ActiveRecord::Base 
    has_many :authentications 
+0

給我們認證和用戶之間的關係(它是如何定義的 - >用戶has_one認證或什麼?) – cristian 2011-12-22 18:43:42

+0

@ Octopus-Paul更新 – AnApprentice 2011-12-22 18:45:56

回答

2

UPD相應的認證。請參閱Octopus-Paul's answer以獲得更好的解決方案。

我想,這將是這個樣子:

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

如果用戶x在認證中沒有條目,那麼該怎麼辦?或者其中一個用戶有幾個與FB的認證?還有重複的問題。 – clyfe 2011-12-22 19:44:16

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

讓我解釋一下它一點點=>在authentications.user_id IS NULL會給你所有的網友認爲don't有來自Facebook

+1

從我的角度來看,這沒有任何意義... – Lichtamberg 2011-12-22 18:50:02

+0

謝謝,但它應該返回數據時返回[]? – AnApprentice 2011-12-22 18:50:59

+0

OP應該使用/接受這個解決方案! bassneck的簡單但熟悉的解決方案在多個層面上都是錯誤的。使用數據庫需要深入的SQL知識。 @Lichtamberg學習更多sql。 – clyfe 2011-12-22 19:36:31

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

您應該使用LEFT JOIN這裏因爲它,查詢也可以回到沒有任何認證誰的用戶(即沒有facebook認證的用戶也是沒有任何認證的用戶)