【问题标题】:rails project using omniauth - stuck on evaluating nil.[] error使用omniauth的rails项目-坚持评估nil.[]错误
【发布时间】:2012-01-25 02:42:21
【问题描述】:

我在我的 rails 项目中使用omniauth 来通过facebook 进行身份验证。

我也在尝试从omniauth获取用户当前的城市,当用户在facebook中有他们当前的城市时,这非常有用。

额外: 用户哈希: 姓名:杰夫·特纳 地点: 名称:加利福尼亚州奥克兰

但是当用户没有任何东西时,我无法设置该值

current_city = user_data['location']['name']

错误: 当你没想到时,你有一个 nil 对象! 您可能期望 ActiveRecord::Base 的实例。 评估 nil 时发生错误。[]

我可以看到,即使从omniauth 回来,这些属性也没有价值

如果我尝试测试 nil 条件

if user_data['location']['name'].blank? == false
current_city = user_data['location']['name']
end

我似乎在第一行遇到了同样的错误 (user_data['location']['name'].blank?)

仍然无法评估 nil。

我对 Rails 很陌生,所以我希望我错过了一些明显的东西。

更新

这就是我最终将其更改为的内容,并且效果很好。下面的答案看起来也可以

if user_data['location'].nil? == false
  if user_data['location']['name'].nil? == false
   current_city = user_data['location']['name']
  end
end

【问题讨论】:

    标签: ruby-on-rails omniauth


    【解决方案1】:

    您可以尝试这样做:

    current_city = auth.fetch('location', []).fetch('name', nil)
    

    使用fetch

    【讨论】:

    • 感谢您的回复,看起来它也会解决它。我们昨晚结束了更改,我忘记更新了。
    • 没关系! Fetch 真的很方便,它是一个很好的工具:)
    • 我一直在处理同样的问题。我当时没有找到这个答案,但我得到了同样的错误。上面的答案给了我错误没有将String隐式转换为Integer我最后使用的是:user.town = auth.info.location.try {split(",")[0] } || "" 我尝试了很多变体,但很多都以未处理的异常告终。如果有人有“万无一失”的方式来获取位置,请在下面发布答案-谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    • 2015-02-08
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    相关资源
    最近更新 更多