2013-05-06 3 views
0

Ruby on Rails 응용 프로그램에서 뭔가 고민하고 있습니다. 이 동적으로 모든 장르를 표시하고 선택-수 있습니다 내 부분이다노래 # 장르의 NoMethodError. Nil 클래스에 대해 정의되지 않은 메소드 'each': NilClass

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 컨트롤러에 새로운 방법을 만들었습니다

class Song < ActiveRecord::Base 

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

end 

:
이 내 모델입니다 :

여기까지 모든 것이 작동하지만, 대신 장르를 선택하면 모든 노래가 렌더링됩니다.그것은 나에게 내가 새로운 응용 프로그램과 해당 작업에서 그 같은 방법을 시도

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을 변경 또한 너무

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

처럼 확인하기 위해 일부 변경

'for nil : NilClass'? – pjmorse

+0

내가 한 일과 대부분의 문제점에서 특정 뷰 또는 잘못된 유형의 인스턴스 변수에 대한 메소드가 누락되었음을 발견했습니다. 몇 번이나 코드를 다시 확인했는데 괜찮은 것 같습니다. .. 그래서 나는 정말로 문제를 찾을 곳을 모른다. – ibechev

답변

0
genre.html.erb 오류를 검색하려고 했
<% if @songs %> 
    <% @songs.each do |song| %> 
    <%= song.title %> 
    <%= song.genre %> 
    <% end %> 
<% else %> 
    No Songs 
<% end %> 
+0

Luis, 고맙다. 내 코드가 바뀌었다. 내 부분은 나에게 모든 기존 장르를 보여 주지만 그 중 하나를 선택하면 나에게도 동일한 오류가 표시됩니다. 오류를 일으키는 종류의 충돌을 내 응용 프로그램에서 다른 뭔가가 가능합니까? – ibechev

+0

답변을 업데이트 했으므로'genre.html.erb'도 변경해야합니다. –

+0

이제 오류가 더 이상 표시되지 않지만 '노래 없음'만 표시됩니다. 보기에 노래를 찾거나 전달하지 않는 것 같습니다. 그러나 도움을 주셔서 감사합니다, 그것은 약간 진전을 이루었습니다. – ibechev