我有一个与用户相关联的omniauth身份验证模型。
aka用户有很多身份验证。
我希望使用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
更新
我正在尝试这种方式。这是否与上述相同?
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 :(得分:0)
我认为你可以这么做(self
在这里已经过时了):
authentications.build(:provider => omni['provider'],
:uid => omni['uid'],
:token => omni['credentials']['token'],
:token_secret => omni['credentials']['secret'])
如果缺少任何键,则只需指定nil值。除非你有一些用于设置这些属性的自定义逻辑,否则在分配nil或不为新记录分配任何内容之间没有区别。