首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用.tap方法构建关联记录?

如何使用.tap方法构建关联记录?
EN

Stack Overflow用户
提问于 2014-10-03 08:35:20
回答 1查看 65关注 0票数 0

我正在构建一个与用户相关的全方位身份验证模型。

又名用户有许多身份验证。

我希望使用tap建立这个身份验证模型的密钥-值对,因为twitter提供了一个秘密密钥,而facebook没有。

因此,如果有这种情况,我希望使用.tap方法来完成下面的条件语句。

代码语言:javascript
运行
复制
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

更新:

我就是这样试着的。这样做是否与上述相同?

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-03 09:38:30

我认为您可以简单地这样做(self在这里已经过时了):

代码语言:javascript
运行
复制
authentications.build(:provider     => omni['provider'],
                      :uid          => omni['uid'],
                      :token        => omni['credentials']['token'],
                      :token_secret => omni['credentials']['secret'])

如果缺少任何键,这将简单地赋值为零。除非您有一些自定义逻辑来设置这些属性,否则为新记录分配零和不分配任何东西是没有区别的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26175751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档