歌曲#genre中的NoMethodError。 nil的未定义方法`each':NilClass

时间:2013-05-06 10:58:51

标签: ruby-on-rails nomethoderror

我在Ruby on Rails应用程序中遇到了困难 这是我的模特:

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 个答案:

答案 0 :(得分: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 %>