2011-04-12 220 views
0

我得到這個錯誤:如何解決「NoMethodError」異常?

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 

回答

2

因爲你試圖調用upvoted_videos nil對象上它拋出一個錯誤。這意味着current_user是零。我想補充某種檢查,看是否current_user不是零調用調用upvoted_videos

+0

ahh你是對的...這是因爲我沒有登錄-_- – 2011-04-12 17:22:25

+0

它碰巧發生在我們身上:) – 2011-04-12 17:23:57

+0

哈哈這一個似乎總是讓我... – 2011-04-12 17:25:27

1

每當你得到一個NoMethodError永遠只是去檢查原因之前,它說,你正在試圖調用nil對象上的東西。 這意味着你不能做此操作前有一個current_user,所以要在確保有人簽名。

此外,它是很好的做法,有這樣功能的回退,像 <% unless current_user.nil? %> ...(Do function here)... <% end %> 什麼視圖