nil的未定义方法`keys':saas hw2的NilClass

har*_*n86 3 ruby ruby-on-rails

我正在尝试在Rails上运行一个应用程序,用于saas课程,作业2.每当我刷新页面时,我都会收到以下错误:

NoMethodError in MoviesController#index

undefined method `keys' for nil:NilClass
Rails.root: C:/Sites/RailsProjects/hw2_rottenpotatoes

Application Trace | Framework Trace | Full Trace
app/controllers/movies_controller.rb:24:in `block in index'
app/controllers/movies_controller.rb:23:in `each'
app/controllers/movies_controller.rb:23:in `index'
Run Code Online (Sandbox Code Playgroud)

我的movies_controller.rb档案:

class MoviesController < ApplicationController

  def show
    id = params[:id] # retrieve movie ID from URI route
    @movie = Movie.find(id) # look up movie by unique ID
  end

  def index
    redirect = false

    if params[:sort]
      @sorting = params[:sort]
    elsif session[:sort]
      @sorting = session[:sort]
      redirect = true
    end

    if redirect
      redirect_to movies_path(:sort => @sorting, :ratings => @ratings)
    end

    Movie.find(:all, :order => @sorting ? @sorting : :id).each do |mv|
      if @ratings.keys.include? mv[:rating]
        (@movies ||= [ ]) << mv
      end
    end

    session[:sort] = @sorting
    session[:ratings] = @ratings
  end

  def new
      # default: render 'new' template
  end

  def create
    @movie = Movie.create!(params[:movie])
    flash[:notice] = "#{@movie.title} was successfully created."
    redirect_to movies_path
  end

  def edit
    @movie = Movie.find params[:id]
  end

  def update
    @movie = Movie.find params[:id]
    @movie.update_attributes!(params[:movie])
    flash[:notice] = "#{@movie.title} was successfully updated."
    redirect_to movie_path(@movie)
  end

  def destroy
    @movie = Movie.find(params[:id])
    @movie.destroy
    flash[:notice] = "Movie '#{@movie.title}' deleted."
    redirect_to movies_path
  end

end
Run Code Online (Sandbox Code Playgroud)

我对Rails非常陌生,并且仅仅花了4个小时就尝试了不同的东西.

Jam*_*ier 14

让我们来看看那个错误信息......

undefined method `keys' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)

这有三个重要部分:

  1. undefined method - 这告诉你核心问题.问题是,您尝试调用它的方法不存在您尝试调用它的方法.
  2. keys - 这告诉你你试图打电话的方法.
  3. nil:NilClass - 这告诉你你在调用方法的内容.在您的情况下,这些信息并没有直接帮助 - 它并没有告诉您究竟要查找什么.这告诉你,但是,无论你正在寻找具有的价值nil.

Rails.root: C:/Sites/RailsProjects/hw2_rottenpotatoes

这告诉你项目的根源,以防万一你完全忘记了你甚至在做什么.没关系.我们都有那些日子.

Application Trace | Framework Trace | Full Trace
app/controllers/movies_controller.rb:24:in `block in index'
app/controllers/movies_controller.rb:23:in `each'
app/controllers/movies_controller.rb:23:in `index'
Run Code Online (Sandbox Code Playgroud)

这告诉您确切地在哪里查找您遇到的错误.它就在第二行:app/controllers/movies_controller.rb:24......文件movies_controller.rb,行24.

它可能指的是这一行:

if @ratings.keys.include? mv[:rating]
Run Code Online (Sandbox Code Playgroud)

你检查,看看是否mv[:rating]@ratings.keys...但是你得到的错误是告诉你,你检查keysnil.这意味着@ratings尚未设定.

所以,看起来你只需要设置@ratings在该index动作顶部附近的某个位置.