Ruby on rails 未定义的方法“[]';对于nil:NilClass用于RoR文件上载

Ruby on rails 未定义的方法“[]';对于nil:NilClass用于RoR文件上载,ruby-on-rails,ruby,Ruby On Rails,Ruby,我的模型叫做Projects,它有一个字符串文件名和一个字符串位置。我有一个上传表单,它应该将一个文件作为输入,上传到public/data/,并将文件名和路径存储为一个新的Projects对象。当我尝试上载文件时,我得到了“未定义的nil:NilClass方法”[]“用于RoR文件上载”。错误出现在我的控制器文件的第86行,即“name=params[:upload][:file]。原始文件名” 视图: 有人能猜出怎么了吗?我是RoR,Ruby是新手 编辑:我尝试了params[:form[:

我的模型叫做Projects,它有一个字符串文件名和一个字符串位置。我有一个上传表单,它应该将一个文件作为输入,上传到public/data/,并将文件名和路径存储为一个新的Projects对象。当我尝试上载文件时,我得到了“未定义的nil:NilClass方法”[]“用于RoR文件上载”。错误出现在我的控制器文件的第86行,即“name=params[:upload][:file]。原始文件名”

视图:

有人能猜出怎么了吗?我是RoR,Ruby是新手


编辑:我尝试了params[:form[:file]]而不是params[:upload][:file],并在同一行中得到错误“无法将符号转换为整数”

在控制器中,您试图使用params[:upload][:file]获取文件,但在表单中,您创建的名称为表单。所以您需要更改表单以上载。所以你的代码应该是

Upload file: <%= file_field( "upload", "file" ) %>
上传文件:

检查您的参数。参数[:upload]为零。试试params[:upload[file]]也许吧?你是什么意思?抱歉,这是我的第一个rails应用程序!请尝试
params[:file].original_filename
,如果不起作用,则向浏览器发送的文件字段的html是什么?不起作用;HTML是
。我尝试了
params[:form[:file]]
并在同一行上得到了错误“无法将符号转换为整数”?我猜是params[:form][:file]。
def upload 
    ### THE LINE BELOW IS WHERE THE ERROR OCCURS
    name = params[:upload][:file].original_filename
    directory = "/public/data"
    path = File.join(directory, name)
    File.open(path, "wb") { |f| f.write(params[:upload][:file].read) }
    @project = Project.new({:filename => name, :location => path})

    respond_to do |format|
      if @project.save
        format.html { redirect_to @project, notice: 'Project was successfully created.' }
        format.json { render json: @project, status: :created, location: @project }
      else
        format.html { render action: "new" }
        format.json { render json: @project.errors, status: :unprocessable_entity }
      end
    end
end
Upload file: <%= file_field( "upload", "file" ) %>