我正在构建一个与用户相关的全方位身份验证模型。
又名用户有许多身份验证。
我希望使用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发布于 2014-10-03 09:38:30
我认为您可以简单地这样做(self在这里已经过时了):
authentications.build(:provider => omni['provider'],
:uid => omni['uid'],
:token => omni['credentials']['token'],
:token_secret => omni['credentials']['secret'])如果缺少任何键,这将简单地赋值为零。除非您有一些自定义逻辑来设置这些属性,否则为新记录分配零和不分配任何东西是没有区别的。
https://stackoverflow.com/questions/26175751
复制相似问题