前言这是“我是红宝石和编程新手”的条款。
我设法让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],
对此的任何帮助将不胜感激。感谢。
答案 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]