【问题标题】:Twitter API- Rails undefined method `name' for nil:NilClassTwitter API-Rails未定义方法'name'为nil:NilClass
【发布时间】:2014-11-23 00:28:18
【问题描述】:

我正在开发一个返回用户加入 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 错误,但不知道如何准确地实现它。请指教。

谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby search twitter nomethoderror


    【解决方案1】:

    当您搜索的用户名不存在用户时,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
    

    【讨论】:

    • 像魅力一样工作!太感谢了! (我会投票,但他们不会让我投票少于 15 分:/)
    • 我有一个后续问题:我按照您的建议实现了代码,它就像一个魅力;如果他们搜索不存在的用户,他们将通过渲染重定向。我遇到的问题是,如果他们搜索不可能存在的用户 - 例如“a a a a”,它会给出结果而不是错误页面!为什么会这样,我怎样才能通过将它们发送到同一个渲染来解决这个问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    • 2012-09-25
    • 2012-03-04
    相关资源
    最近更新 更多