2016-10-21 57 views
2

我很新的Rails和Carrierwave。载波图像上传返回空params

我有这种形式显示一个jQuery模式框与一些动态代码,以显示1到N图像用户在单击文件按钮时选择。

enter image description here

这是我输入文件,其形式沿(我已经删除HTML的其余部分,因为它用于此目的的说明我的问题似乎无关):

<%= simple_form_for [:project, ConsolidatedDocument.new], html: { role: 'form' } do |f| %> 
... 
<input type="file" name="photo[files][]" multiple="multiple" id="file_upload_input"> 
... 
<%= f.button :button, class: 'btn btn-primary btn-xs' %> 
... 
<% end %> 

在我控制器,我试图保存所有表单输入的值,这些值在按下按钮时看起来会自动出现。

麻烦的是,无论输入文件应该带什么值都是完全空的,我似乎无法找到它为什么是空的原因。点击提交时,这里是我的PARAMS:

(byebug) params 
{"utf8"=>"✓", "authenticity_token"=>"xESj3za30Y9CBXqG6P3MHm9axNGsRY/+ejsiMLYfIPVyto7CAnTVYdhW5xBMlzpiBKPbXq2h0tfE8KYnXtmkVg==", "photo"=>{"files"=>[""]}, "macro_types_1"=>{"id"=>"4"}, "doc_types_create_1"=>{"id"=>"127"}, "macro_types_0"=>{"id"=>"5"}, "doc_types_create_0"=>{"id"=>"141"}, "document_checklist_comment"=>{"photo_ids"=>["87611", "87612"]}, "button"=>"", "controller"=>"consolidated_documents", "action"=>"create", "project_id"=>"524"} 

请参阅 “照片”=> { “文件”=> [ “”]}坚持在未来空。如上所述,我对Rails没有经验,尽管我已经通过stackoverflow搜索类似的问题,但我的搜索似乎与我在这里寻找的不同。

有什么建议吗?

编辑:

作为一个更新,我已经修修补补和我的形式,通过手工传递文件时,我打电话ConsolidatedDocuments.new,就像这样:

post_attributes = params.require(:consolidated_document).permit(:name, :file, :document_type_id, :project_id, :user_id) 
       @consolidated_document = ConsolidatedDocument.new("name" => @file_name, "file" => @file_string, "document_type_id" => params["doc_types_create_"+i.to_s]["id"],"project_id" => @project.id, "user_id" => current_user.id)       

然后我注意到,无论我为那个“file”=> @file_string部分传递的值,它总是将“file”渲染为nil。

这里是我的物体看起来像在打节省的时间:

(byebug) @consolidated_document 
#<ConsolidatedDocument id: nil, name: "4f70d1b892066f849ee88222b7251ac6.jpg", file: nil, deleted: false, deleted_at: nil, document_type_id: 141, project_id: 524, user_id: 409, created_at: nil, updated_at: nil> 

文件正在添加中出零坚持!怎么来的?

+0

你有没有跟着https://github.com/carrierwaveuploader/carrierwave#多文件上传 – Sajan

+0

是@sajan。这不是该系统内建的第一个图像上传例程。所以,所有的参数设置和配置都已经正确设置。在我看来,这种多文件上传的性质以及它包含一些动态创建的输入的事实是这种实现的混乱源头。我正试着仔细看看它。 –

回答

1

我觉得你有simple_form_for.Try问题,

**<%= simple_form_for :project, url: url_for(controller: "consolidated_documents", action: "create"), html: { role: 'form' } do |f| %> 
... 
<input type="file" name="photo[files][]" multiple="multiple" id="file_upload_input"> 
... 
<% end %>** 

而且浏览输入没有与表单关联,因此PARAMS才出现在当时存在提交的任何文件。您的按钮字段未与文件输入链接。可能是更好的,如果形式的完整代码avaliable

+0

谢谢@Sathishkumar Jayaraj!这就是我一直在寻找的! –

+0

@ClaudioFernandoMaciel请提供正确答案的勾号。 –

1

变化形式象下面这样:

<%= form_for(@consolidated_document) do |f| %> 

<%= file_field_tag "photo[]", multiple: true %> 

<%= f.submit %> 

在控制新:

@consolidated_document = ConsolidatedDocument.new