2012-11-14 112 views
0

我正在上传多个文件,但我没有正确地在窗体和控制器之间传递参数 - 不太清楚我错过了什么。在rails中上传多个文件3

形式很简单:

<%= form_tag({:controller => :admins, :action => :upload_json}, {:multipart => true, :method => :post, :html => { :class => "form-horizontal"}}) do %> 

    <fieldset> 
    <legend>Data</legend> 
    <ol class="field-list"> 
     <li> 
     <label for="data-file">JSON File</label> 
     <%= file_field_tag 'jsonfileupload', multiple: true %> 
     </li> 
    </ol> 


    <div class="form-actions"> 
     <%= submit_tag "Upload" %> 
    </div> 

    </fieldset> 

<% end %> 

在控制器中,我只是在做这个,看看有什么传递:

@output = params[:jsonfileupload] 

在视图中,我只是做一个debug,看看有什么返回,它只会拉取任何一组选定文件的最后一个文件。

#<ActionDispatch::Http::UploadedFile:0x007f95d0c21010 @original_filename="4987.json", @content_type="application/json", @headers="Content-Disposition: form-data; name=\"jsonfileupload\"; filename=\"4987.json\"\r\nContent-Type: application/json\r\n", @tempfile=#<File:/var/folders/0p/6lq88m950mgftng1qm1w63_8000194/T/RackMultipart20121114-389-t9l7vs>> 

不知道我错过了什么让它返回所有选定的文件。谢谢您的帮助!

+1

你错过'original_filename',改变这种'@output =参数[:jsonfileupload]''到@output =参数[:jsonfileupload] .original_filename ' – Thanh

+0

谢谢@Kien Thanh。如果我选择多个文件,我仍然无法看到多个文件。我只得到所选的最后一个文件。 – matthewvb

+0

我应该注意到,这种形式并不与模型绑定,因为它只是做一些临时的数据加载然后被丢弃。 – matthewvb

回答

6

我能够通过调整file_field_tag来解决这个:<%= file_field_tag 'jsonfileupload[]', multiple: true %>

+0

that []是关键... –

+0

这是非常有帮助的。 – ugoa