2012-10-27 87 views
0

深入Rails的上傳功能,實際上跟在this railsguide之後。表單上傳「undefined方法`[]'爲零:NilClass」

我使用的上傳表單下面的代碼:

<%= form_tag({ action: :upload }, multipart: true) do %> 
    <%= file_field_tag :picture %> 
    <%= submit_tag %> 
<% end %> 

這是我上傳方法

def upload 
    uploaded_io = params[:customer][:picture]  #erroneous line!! 
    File.open(Rails.root.join('public', 'uploads', uploaded_io.original_filename), 'w') do |file| 
     file.write(uploaded_io.read) 
    end 
    flash[:notice] = "File uploaded successfully!" 
    redirect_to root_path 
end 

我已經打上我相信這是錯誤的行第二個代碼片段。上傳方法只是從railsguide粘貼,我調整了params數組[:customer]。

當需要上傳文件,我得到這個錯誤:

undefined method `[]' for nil:NilClass 

它指的是我上面標線。

我還發現this其他問題,但我還沒有想出如何可能幫助我。

我在做什麼錯?我的表單是錯的還是我的控制器方法?任何幫助讚賞。

+0

我們展示你的'params'做這個,你控制器第一行'PARAMS .inspect'並與我們分享'params'的內容 – Viren

回答

2

嘗試改用

params[:picture] 

可以隨時查看日誌,看看請求參數如何散的結構。當你在rails中使用form_for時,讓我們假設一個像下面這樣的客戶對象。那麼你得到的領域

[:customer][:field_name] 

但因爲你只是使用的form_tag幫手,它不是在另一個哈希包裹:

<%= form_for @customer do |f| %> 
<%= f.text_field :field_name %> 
<% end %> 
+0

我試着將它改爲'params [:picture]',但那並沒有改變任何東西。我也想在沒有模型的情況下使用form_tag。 – weltschmerz

相關問題