Как я могу исправить исключение «NoMethodError»?

#ruby-on-rails #ruby #debugging #ruby-on-rails-3

#ruby-on-rails #ruby #отладка #ruby-on-rails-3

Вопрос:

Я получаю эту ошибку:

 NoMethodError in Videos#index

Showing /rubyprograms/dreamstill/app/views/videos/index.html.erb where line #12 raised:

undefined method `upvoted_videos' for nil:NilClass
Extracted source (around line #12):

9: <div class="home_options">
10:     <ul class="home_options_list">
11:         <li> <%= link_to "Top Songs", videos_path, :class => "top_songs  chosen_home_option" %> </li>
12:         <li> <%= link_to "#{pluralize(current_user.upvoted_videos.count, 'Upvoted Song')}", upvoted_videos_path, :action => "upvoted_songs", :class => "upvoted_songs" %> </li>
  

Это в моей пользовательской модели:

 def upvoted_videos
  self.voted_videos.where("value = 1")
end
  

Ответ №1:

Выдает ошибку, потому что вы пытаетесь вызвать upvoted_videos нулевой объект. Это означает, что current_user равно нулю. Я бы добавил какую-то проверку, чтобы увидеть, не равно ли current_user нулю, перед вызовом calling upvoted_videos

Комментарии:

1. это случается с лучшими из нас 🙂

Ответ №2:

Всякий раз, когда вы получаете NoMethodError всегда просто проверяйте причину, и там говорится, что вы пытаетесь вызвать что-то для nil объекта. Это означает, что перед выполнением этой операции у вас не должно быть current_user , поэтому убедитесь, что кто-то вошел в систему.

Также рекомендуется иметь запасной вариант для таких функций, как <% unless current_user.nil? %> ...(Do function here)... <% end %> или что-то в представлении