Twitter API-Rails неопределенное имя метода для nil:NilClass

Я работаю над проектом, который возвращает дату, когда пользователь присоединился к 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, но не уверен, как это точно реализовать. Пожалуйста, порекомендуйте.

Спасибо!


person alicht    schedule 28.09.2014    source источник


Ответы (1)


Когда пользователя с именем пользователя, которое вы ищете, не существует, twitter_client.user_search(@name) ничего не находит, а метод first возвращает nil, и вы пытаетесь прочитать атрибут name из nil.

Вот почему вы получаете ошибку.

Ты можешь сделать это:

@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
person Omid Kamangar    schedule 28.09.2014
comment
Работает как шарм! Большое спасибо! (Я бы проголосовал за это, но они не позволят мне проголосовать с менее чем 15 баллами :/) - person alicht; 29.09.2014
comment
У меня есть дополнительный вопрос: я реализовал код, как вы предложили, и он работает как шарм; если они ищут несуществующего пользователя, они перенаправляются через рендеринг. Проблема, с которой я сталкиваюсь, заключается в том, что если они ищут пользователя, существование которого невозможно, например, a a a, он дает результат, а не страницу с ошибкой! Почему это так, и как я могу решить эту проблему, отправив их на один и тот же рендер? - person alicht; 29.09.2014