2013-05-06 136 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

相关问题