2012-10-04 38 views
1

我的模式被稱爲項目,其中有一個字符串的文件名和一個字符串位置。我有一個上傳表單,它應該將文件作爲輸入,將其上傳到public/data /,並將文件名和路徑存儲爲新的Projects對象。當我嘗試上傳文件時,我得到了「nil:NilClass for roR文件上傳」的未定義方法[]。「該錯誤是在我的控制器文件的86行,這是 「名稱=參數[:上傳] [:文件] .original_filename」未定義的方法`[]」爲零:NilClass爲RoR的文件上載

檢視:

<%= 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],並在同一行中得到錯誤「無法將Symbol轉換爲Integer」。

+0

檢查你的參數。 params [:upload]爲零。嘗試params [:上傳[文件]]也許? – oldergod

+0

嘗試that..same問題:( – user1436111

+0

檢查您的PARAMS – oldergod

回答

0

在您控制器中,您嘗試使用params [:upload] [:file]獲取文件,但在您的表單中創建了名稱,其格式爲。所以你需要改變表單上傳。所以你的代碼應該是,

Upload file: <%= file_field("upload", "file") %> 
相關問題