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)
这有三个重要部分:
undefined method - 这告诉你核心问题.问题是,您尝试调用它的方法不存在您尝试调用它的方法.keys - 这告诉你你试图打电话的方法.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...但是你得到的错误是告诉你,你检查keys上nil.这意味着@ratings尚未设定.
所以,看起来你只需要设置@ratings在该index动作顶部附近的某个位置.
| 归档时间: |
|
| 查看次数: |
8080 次 |
| 最近记录: |