1

私のモデルは Projects と呼ばれ、文字列のファイル名と文字列の場所があります。ファイルを入力として受け取り、それを public/data/ にアップロードし、ファイル名とパスを新しい Projects オブジェクトとして保存するアップロード フォームがあります。ファイルをアップロードしようとすると、"undefined method `[]' for nil:NilClass for RoR file upload." というメッセージが表示されます。エラーはコントローラー ファイルの 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[:upload][:file] の代わりに params[:form[:file]] を試したところ、同じ行に「シンボルを整数に変換できません」というエラーが表示されました。

4

1 に答える 1

0

コントローラーでは、params[:upload][:file] を使用してファイルを取得しようとしていますが、フォームでは名前をformとして作成しました。そのため、アップロードするフォームを変更する必要があります。したがって、コードは次のようになります。

Upload file: <%= file_field( "upload", "file" ) %>
于 2012-10-04T08:20:21.543 に答える