#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 %>
или что-то в представлении