2016-05-09 88 views
0

我有兩個型號Rails的find_or_initialize_by與加入的ActiveRecord :: AssociationTypeMismatch

users (id, name, ...) 
authorizations (id, provider, provider_uid, user_id,...) 

用戶的has_many授權

現在,當我有通過Facebook登錄我需要檢查provider_uid預置如果不是創建一個新的。

user = User.joins(:authorizations).find_or_initialize_by(
     authorizations: { 
     provider: 'facebook', 
     provider_uid: provider_uid 
     } 
    ) 

錯誤

的ActiveRecord :: AssociationTypeMismatch - 授權(#70336918074440) 預期,得到了陣列(#70336893054160):

+0

看來你必須提供單個對象,而且你正在提供數組 – Thorin

+0

什麼是'influencer_authorizations'? – RSB

+0

對不起'授權'改變了這個問題。簡化了模型,使其變得簡單 –

回答

1

嘗試使用first_or_initialize代替,這兩種方案覆蓋如下

您可以如果你想初始化一個user對象

user = User.joins(:authorizations).where("authorizations.provider = 'facebook' AND authorizations.provider_uid = ?", provider_uid).first_or_initialize 

嘗試這個但是,如果你想找到或爲現有用戶創建的授權,你可以做到這一點,你可以用first_or_initialize

authorization = Authorization.where(user_id: user_id, provider: 'facebook', provider_uid: provider_uid).first_or_initialize 
authorization.save if authorization.new_record? 

希望這幫助!

+0

之後保存他是否有可能在此快速聊天? –

+0

你有沒有試過第一個? – RSB

+0

http://stackoverflow.com/questions/37114635/rails-associated-table-does-not-update –

相關問題