我在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 %>
我在全新的应用程序和它的工作中尝试过相同的方式!! 我的问题可能在哪里?
答案 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 %>