ruby-on-rails - Twitter API- Rails 未定义方法 `name' 为 nil :NilClass

标签 ruby-on-rails ruby search twitter nomethoderror

我正在开发一个返回用户加入 Twitter 的日期的项目。在搜索存在的用户时,一切都很顺利。然而,当我搜索一个不存在的用户名时,我得到了这个丑陋的错误:

  NoMethodError in WelcomeController#search_results
  undefined method `name' for nil:NilClass

这是我的代码:

 def search_results
    twitter_client = Twitter::REST::Client.new do |config|
      config.consumer_key        = ENV['twitter_consumer_key']
      config.consumer_secret     = ENV['twitter_consumer_secret']
      config.access_token        = ENV['twitter_access_token']
      config.access_token_secret = ENV['twitter_access_token_secret']
    end
    @name = params[:name]
    @full_name = twitter_client.user_search(@name).first.name
    created_at = twitter_client.user_search(@name).first.created_at
    @created_at = created_at    
    @user_id = twitter_client.user_search(@name).first.id
  end

我是 Rails 的新手,我相信我必须使用 Rescue 或 flash error,但我不确定如何准确地实现它。请指教。

谢谢!

最佳答案

当用户不存在您搜索的用户名时,twitter_client.user_search(@name) 什么也找不到,first 方法返回 nil,并且您正在尝试从 nil 中读取 name 属性。

这就是您收到错误的原因。

你可以这样做:

@name = params[:name]
user = twitter_client.user_search(@name).first
if user
     @full_name = user.name
     @created_at = user.created_at    
     @user_id = user.id
else
     # do something else
end

关于ruby-on-rails - Twitter API- Rails 未定义方法 `name' 为 nil :NilClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26085900/

相关文章:

mysql - 查询数组列是否包含一个或多个值

ruby-on-rails - 是否可以从模型内部使用 rails image_tag ?

c# - 使用 StringComparer 和 StringBuilder 来搜索字符串

ruby - "undefined method ' 变成 ' for nil:NilClass"不应该的地方

ruby-on-rails - Rails 和电子邮件打开通知

php - 在 php mysql 中使用 MATCH() AGAINST() 时出错

c++ - 如何查找无序数(线性搜索)

ruby-on-rails - Guard 不会根据 spec/features/login_spec.rb 上的更改运行

ruby-on-rails - rails ERB : when to use :locals=> {:foo => @bar} vs just foo: @bar

ruby - 防止 ruby​​ selenium-webdriver 在引发 UnhandledAlertError 时解除警报