2015-09-24 2 views
-1

Я пытаюсь изменить веб-приложение в рельсах и он бросает ошибкунеопределенный метод `каждый» для ноль: NilClass - Рубин на Rails

undefined method `each' for nil:NilClass 

в - @movies.each do |movie|

Здесь есть индекс HTML Haml файл

%h1 All Movies 
    = form_tag movies_path, :id=>"ratings_form", :method => :get do 
     Include: 
     - @all_ratings.each do |rating| 
     = rating 
     = check_box_tag "ratings[#{rating}]",1, (true if @ratings[rating]), :id=>"ratings_#{rating}." 
     = submit_tag 'Refresh', {:id=>"ratings_submit"} 

    %table#movies 
     %thead 
     %tr 
      %th{:class=>("hilite" if @sort_by =="title")}= link_to 'Movie Title', movies_path(:sort_by=>"title", :ratings=>@ratings), :id=>"title_header"  
      %th Rating 
      %th{:class=>("hilite" if @sort_by =="release_date")}= link_to 'Release Date', movies_path(:sort_by=>"release_date", :ratings=>@ratings), :id=>"release_date_header" 
      %th More Info 
     %tbody 
     - @movies.each do |movie| 
      %tr 
      %td= movie.title 
      %td= movie.rating 
      %td= movie.release_date 
      %td= link_to "More about #{movie.title}", movie_path(movie) 

    = link_to 'Add new movie', new_movie_path 

Здесь индекс весело в файле controller.rb

def index 
    @all_ratings = Movie.all_ratings 
    redirect = false 

    logger.debug(session.inspect) 

     if params[:sort_by] 
      @sort_by = params[:sort_by] 
      session[:sort_by] = params[:sort_by] 
     elsif session[:sort_by] 
      @sort_by = session[:sort_by] 
      redirect = true 
     else 
      @sort_by = nil 
     end 

     if params[:commit] == "Refresh" and params[:rating].nil? 
      @ratings = nil 
      session[:ratings] = nil 
     elsif params[:ratings] 
      @ratings = params[:ratings] 
      session[:ratings] = params[:ratings] 
     elsif session[:ratings] 
      @ratings = session[:ratings] 
      redirect = true 
     else 
      @ratings = nil 
     end 

     if redirect 
      flash.keep 
      redirect_to movies_path :sort_by=>@sort_by, :ratings=>@ratings 
     end  

     if @ratings and @sort_by 
      @movies = Movie.where(:rating => @ratings.keys).order(@sort_by) 
     elsif @ratings 
      @movies = Movie.where(:rating => @ratings.keys) 
     elsif @sort_by 
      @movies = Movie.order(@sort_by) 
     else 
      @movie = Movie.all 
     end 

     if [email protected] 
      @ratings = Hash.new 
     end 
     end 

Где ошибка?

ответ

1

Заменить @movie = Movie.all на @movies = Movie.all. Он находится внизу вашего указательного контроллера.

+0

Черт. Плохая ошибка! Большое спасибо. – Aiyoyo