2014-10-06 19 views
0

我想將文件上傳到/ tmp文件夾,然後在控制器中使用它。但是文件不會從視圖到控制器。 看我的看法:文件上傳到/ tmp,rails 2

<% form_tag import_cash_payments_forms_path, {:method => :post, :multipart => true} do %> 
    <b>city:</b> 
    <%= select :data, :city_id, @cities %> 
    <br> 
    <br> 
    <b>region:</b> 
    <%= select :data, :region_id, @regions %> 
    <br> 
    <br> 
    <b>date:</b> 
    <%= date_select2 :data, :date %> 
    <br> 
    <br> 
    <b>file:</b><br> 
    <%= file_field_tag :file %><br> 
    <small>Доступные форматы: xml, xmlx</small> 
    <br> 
    <br> 
    <%= submit_tag "Load", :onclick => "submitAndTemporarilyDisable(this)" %> 
<% end %> 

這裏是我的控制器:

def import_cash_payments 
     selects 
     employer_id = current_employer.id 
     datas = params.slice(:city_id, :region_id, :date) 
     file = File.new(params[:file]) # HERE IS ERROR... File is nil, but why? 
     file.save 
     import = Import.new(datas, employer_id, file) 
     import.run 
    end 

錯誤,我得到:

can't convert nil into String 

錯誤給出befor提交,我甚至不能按下按鈕辯論,因爲視圖不工作。

+0

文件是一個ruby類,它將期望一組特定的屬性被傳遞給它的'.new'方法。你在params中獲得的屬性可能有錯誤的名字。你在'params [:file]'中有什麼?'? (你的日誌文件會顯示你) – 2014-10-06 16:16:11

回答

1

以下是我過去所做的,只是手工完成(而不是使用Paperclip或類似的)。關鍵是你從文件參數.read中提取數據,然後把它寫入你用.write創建的新文件中。你也需要給它一個文件名,我在這裏使用了一個時間戳。

#you need to make a filename for the file in tmp. Let's use a timestamp 
@filename = File.join("/tmp", Time.now.to_f) 
@file = File.open(@filename,"w"){|f| f.write params[:file].read}