【问题标题】:httparty NoMethodError: undefined method `[]' for nil:NilClasshttparty NoMethodError: nil:NilClass 的未定义方法“[]”
【发布时间】:2018-05-07 15:57:20
【问题描述】:

我使用 Ruby 2.5.0,httparty gem 我的模型

class FeedEntry
  include Mongoid::Document
  include Mongoid::Timestamps

  field :guid, type: String
  field :url, type: String
  field :share_count, type: Integer, default: 2

  before_update :share_info

  def share_info
    checked_url = self.url
    json_stats = HTTParty.get("http://api.sharedcount.com/?url=#{checked_url}&apikey=#{Rails.application.credentials.socialshared_api_key}", timeout: 180, open_timeout: 1200)
    self.share_count = json_stats['Facebook']['share_count']
  end
end

当我尝试解析时出现此错误

NoMethodError: undefined method `[]' for nil:NilClass

/Users/ipatov/rails_projects/apps/tm/app/models/feed_entry.rb:71:in `share_info'

71 行 self.share_count = json_stats['Facebook']['share_count']

【问题讨论】:

  • 显然,json_stats['Facebook'] 为零。而且你不能在零时打电话给['share_count']。因此错误。
  • @jvillian 如何避免这种情况?
  • 也许您应该将json_stats 的内容添加到您的问题中。

标签: ruby-on-rails httparty


【解决方案1】:

这是关于Rollbar says 的最常见错误之一

问题肯定不是json_stats['Facebook']nil,所以访问['share_count'] 会产生错误。我建议您使用dig 来防止这种不希望出现的错误,并决定当json_stats['Facebook']nil 时该怎么做。

    self.share_count = json_stats.dig('Facebook', 'share_count')

【讨论】:

  • 好主意。也许,为了清楚起见,您可以将dig 的用法添加到您的答案中。
  • 完成,请发现它已编辑。我还添加了 dig hash 方法的链接
猜你喜欢
  • 2013-11-14
  • 2013-01-14
  • 2017-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多