我无法在我的用户模型中使用以下方法来处理从LinkedIn获得的用于用户登录的哈希(“ auth”):

def self.deep_get auth, *fields
    auth.inject(auth) { |acc, e| acc[e] if acc }
end

稍后,当我使用omniauth / linkedin gem创建用户时,将在用户模型中调用“ deep_get”方法。 但是,它为我知道不是nil的provider / uid / headline / email用户字段返回nil值。

我以first_name和last_name字段为例,因为这种方法有效(不返回nil值),但是(据我所知)不良的样式/异常处理。 关于我的deep_get注入方法为何无法按我想要的那样检索哈希中的数据的任何想法?

def self.create_from_omniauth(auth)

      create! do |user|

        # i'd like to retrieve user information from linkedin per the following with my inject method, but i am getting nil values when i should be getting data.

        # :provider and :uid are on the same branch level of data. first_name,last_name,email,etc. are on a branch just below called 'info' 

        user.provider = deep_get(auth, :provider)
        user.uid = deep_get(auth, :uid)
        user.headline = deep_get(auth, :info, :headline)
        user.email = deep_get(auth, :info, :email)

        # the below is working but i know pokemon exception handling is not good style. 

        begin
          user.first_name = auth["info"]["first_name"]
        rescue
        end

        begin
          user.last_name = auth["info"]["last_name"]
        rescue
        end

#1楼 票数:0

尝试这个

def deep_find(obj,key)
  if obj.respond_to?(:key?) && obj.key?(key)
     obj[key]
  elsif obj.respond_to?(:each)
     r = nil
     obj.find{ |*a| r=deep_find(a.last,key) }
     r
  end
end
or try this
class Hash
  def deep_fetch(key, default = nil)
    default = yield if block_given?
    (deep_find(key) or default) or nil
  end

  def deep_find(key)
    if key?(key)
      self[key]
    else  
      self.values.inject(nil) do |memo, v|             
        memo = v.deep_find(key) if v.respond_to?(:deep_find)       
        memo unless memo.nil?  
      end 
    end     
  end
end

  ask by keypulsations translate from so

未解决问题?本站智能推荐:

1回复

从嵌套的哈希对象中检索数据

我创建这样的表格 如果未通过验证,我将重新显示包含已填充数据的表单。 填充问题数据并不难 但是,我很难从会话哈希中获取答案模型(具有内容和链接字段)的嵌套值。 这是行不通的。 我认为这是由于哈希对象中的0、1和2迭代。 例如,这是哈希对象的片段(完整显示在下面) 但是我不知
2回复

如何以嵌套哈希的形式从RailsDB中检索关系数据?

在我的Rails DB中,我有这些表: users statuses (假设其名称包括active和inactive ), 每个用户每个日期的status_records以显示其状态(例如, date: '2019-07-09', user: User.first, statu
1回复

jrubyonrails检索哈希中的属性

我已成功将模型与远程netezza数据库连接,可以在“ rails c”中从数据库中检索数据了: 例如 但是,我无法对检索属性进行哈希处理: 无论如何,我是否可以强制活动记录哈希对象?
2回复

无法从会话中检索哈希

我有一个哈希: 我将它保存在会话中: 当我检索哈希时: hash2是: 但是hash2[:a]和hash2[:b]返回nil 。 知道为什么会这样吗?
2回复

从数据库检索数据-哈希

我有一个称为audits的表,该表具有一列“ changes”,以哈希形式存储数据 我想以以下条件检索所有条目: 我首先尝试了以下代码,但没有返回任何内容: 然后,我尝试了以下代码,该代码使用auditable_type = 'Expression'和action = 'destro
1回复

如何从默认的rails:data哈希检索数据?

我有这样的东西(基本下拉菜单): <ul class="dropdown-menu"> <% @sidebar_categories.each do |category| %> <li data-toggle="modal" data-target="#ho
1回复

如何检索数据库sql数据并将其存储到数组中的哈希

我在数据库中有一个表: | id | param1 | param2 | param3 | param4 | param5 | | 1 | value11 | value12 | value13 | 18 | value15 | | 2 | value21
2回复

我需要使用注入方法还是要修改此原始哈希

如果哈希中的特定键为nil,则需要更新哈希。 我必须在饼图中显示来自散列的绘图数据。 但是关键来了。 所以我该如何修改散列中的nil键,这是我的原始散列: 所需的哈希: 我是否需要使用注入方法,否则我将修改此原始哈希。