2013-05-06 81 views
0

我在Ruby on Rails應用程序中苦苦掙扎。
這是我的模型:歌曲#流派中的NoMethodError。未定義的方法'each'for nil:NilClass

class Song < ActiveRecord::Base 

    attr_accessible :duration, :title, :track_URL, :genre, :image_url 

end 

我在songs控制器提出了新的方法:

def genre 
    @songs = Song.find_all_by_genre(params[:id]) 
    @genre = (params[:id]) 

    respond_to do |format| 
     format.html # index.html.erb 
     format.json {render json: @songs} 
    end 
    end 

這是我的局部視圖,其動態顯示所有的流派,使他們選擇,能夠:

<% @songs = Song.select('DISTINCT genre')%> 
<li> 
    <% @songs.each do |g| %> 
     <a href="/genre/<%= g.genre %>"><%= g.genre %></a> 
    <% end %> 
</li> 

到這裏一切正常,但是當我選擇一個流派,而不是渲染的所有歌曲在songs/genre.html.erb鑑於它給了我錯誤,因爲我有方法在控制器

NoMethodError in Songs#genre 

Showing C:/Sites/OML/app/views/songs/genre.html.erb where line #3 raised: 

undefined method `each' for nil:NilClass 
Extracted source (around line #3): 

1: <h2><%= @genre %></h2> 
2: 
3: <% @songs.each do |song| %> 
4:  <%= song.title %> 
5:  <%= song.genre %> 
6: <% end %> 

我曾嘗試在一個全新的應用程序,其工作的,同樣的方式,我無法理解! 哪裏可能是我的問題?

+1

你嘗試搜索錯誤,「NoMethodError:未定義的方法「各'爲零:NilClass「? – pjmorse 2013-05-06 11:03:48

+0

我做了,而且在大多數情況下,我發現問題缺少特定視圖或錯誤類型實例變量的方法。我幾次重新檢查了我的代碼,所有這些似乎都沒問題。 ..我真的不知道在哪裏尋找問題 – ibechev 2013-05-06 12:21:11

回答

0

更改部分,以檢查是否有任何實際的歌曲,像這樣

<li> 
    <% if @songs %> 
    <% @songs.each do |g| %> 
     <a href="/genre/<%= g.genre %>"><%= g.genre %></a> 
    <% end %> 
    <% else %> 
    No songs 
    <% end %> 
</li> 

也能改變你genre.html.erb

<% if @songs %> 
    <% @songs.each do |song| %> 
    <%= song.title %> 
    <%= song.genre %> 
    <% end %> 
<% else %> 
    No Songs 
<% end %> 
+0

謝謝路易斯,我改變了我的代碼。我的部分是向我展示所有現有的流派,但是當我選擇其中的任何一個時,它都顯示出同樣的錯誤。在我的應用程序中是否有其他可能導致導致錯誤的衝突? – ibechev 2013-05-06 11:47:08

+0

我已經更新了我的答案,您還必須更改'genre.html.erb'。 – 2013-05-06 12:12:01

+0

現在更好,它不再顯示錯誤,但它只顯示'沒有歌曲'。它看起來沒有找到或傳遞任何歌曲到視圖。不過謝謝你的幫助,它取得了一些進展。 – ibechev 2013-05-06 12:36:45

相關問題