未定义的方法`[]'表示nil:NilClass用于RoR文件上传

时间:2012-10-04 05:53:36

标签: ruby-on-rails ruby

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

查看:

<%= form_tag( { :action => 'upload' }, :multipart => true ) %>
Upload file: <%= file_field( "form", "file" ) %>
<br />
<%= submit_tag( "Upload 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

谁能猜到什么是错的?我是RoR,Ruby,新手。

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

1 个答案:

答案 0 :(得分:0)

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

Upload file: <%= file_field( "upload", "file" ) %>