2014-10-03 27 views
0

我有我構建是關聯到用戶的omniauth認證模型。如何使用.tap方法建立關聯記錄?

又名用戶有很多認證。

我希望使用tap來構建這種認證模型的鍵值對,因爲twitter在facebook沒有提供密鑰的情況下提供了一個密鑰。

所以,如果我有這個,我要完成使用.tap方法,而不是下面的條件語句。

class User < ActiveRecord::Base 

    def apply_omniauth(omni) 
    if omni['credentials']['secret'] 
     self.authentications.build(:provider  => omni['provider'], 
           :uid   => omni['uid'], 
           :token  => omni['credentials']['token'], 
           :token_secret => omni['credentials']['secret'] 
    else 
     self.authentications.build(:provider  => omni['provider'], 
           :uid   => omni['uid'], 
           :token  => omni['credentials']['token'] 
    end 
    end 

end 

UPDATE:

我想是這樣。這是否與上述相同?

self.authentications.build.tap do |auth| 
    auth[:provider]  = omni['provider']    if omni['provider'] 
    auth[:uid]   = omni['uid']     if omni['uid'] 
    auth[:token]  = omni['credentials']['token'] if omni['credentials']['token'] 
    auth[:token_secret] = omni['credentials']['secret'] if omni['credentials']['secret'] 
end 
+0

什麼是您的實際問題? – Jesper 2014-10-03 09:07:47

+0

@Jesper現在清楚了嗎? – ahnbizcad 2014-10-03 09:12:05

+0

我相信你不需要自來水可言,'build'可以採取塊。 「憑證」是保證存在的關鍵嗎? – BroiSatse 2014-10-03 09:34:38

回答

0

我想你可以簡單地做(self是過時這裏):

authentications.build(:provider  => omni['provider'], 
         :uid   => omni['uid'], 
         :token  => omni['credentials']['token'], 
         :token_secret => omni['credentials']['secret']) 

如果任何密鑰丟失,這將只分配零值。除非您有設置這些屬性的自定義邏輯,否則分配nil或不爲新記錄分配任何內容沒有區別。

相關問題