Ruby on rails - 在拉取facebook数据时处理错误

时间:2013-12-16 23:21:24

标签: ruby-on-rails facebook omniauth

前言这是“我是红宝石和编程新手”的条款。

我设法让ruby.railstutorial.org中的登录系统工作,并添加了omniauth。所有功能都可以让我创建一个用户。

我现在正试图从Facebook获取更多信息,并设法在其他方面拉动位置。

当Facebook用户还没有指定位置时,我遇到了问题(如果用户缺少我正在拉动的其他数据(即性别或生日),我想我会遇到类似问题。

我试图像这样抓住这个错误:

if auth_hash["extra"]["raw_info"]["location"]["name"] 
        citystate1 = auth_hash["extra"]["raw_info"]["location"]["name"].split(',')
      else
        citystate1 =[nil,nil]
      end

我收到错误:未定义方法`[]'代表nil:NilClass

我的目标是提取Facebook提供的任何数据......如果没有,则零值必须足够。

user = User.new :firstname => auth_hash["info"]["first_name"],
                      :lastname => auth_hash["info"]["last_name"], 
                      :email => auth_hash["info"]["email"].downcase,
                      :dob => Date.strptime(auth_hash["extra"]["raw_info"]["birthday"],'%m/%d/%Y'),
                      :city => citystate1[0],
                      :state => citystate1[1],

对此的任何帮助将不胜感激。感谢。

2 个答案:

答案 0 :(得分:0)

您可以fetch哈希值中的%w(extra raw_info location name).inject{ |k| auth_hash.fetch(k, "there's nothing here") }

fetch

这将遍历键数组,直到它返回值或找不到键。 nil包含默认选项 - 您可能希望返回"there's nothing here"代替{{1}}

请参阅:http://www.ruby-doc.org/core-1.9.3/Hash.html#method-i-fetch

答案 1 :(得分:0)

city, state = auth_hash["extra"]["raw_info"]["location"]["name"]
  .split(',') rescue [nil, nil]