【发布时间】:2017-03-03 17:59:36
【问题描述】:
我对 Rails 和 Carrierwave 还是很陌生。
我有这个表单,它显示一个带有一些动态代码的 jquery 模态框,用于在单击文件按钮时显示用户选择的 1 到 N 个图像。
这是我的输入文件及其形式(我已经删除了 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 %>
在我的控制器中,我正在尝试保存所有表单输入的值,这些值在点击按钮时似乎自动出现。
问题是输入文件中的任何值都是空的,我似乎找不到它为空的原因。这是我点击提交时的参数:
(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"}
看到 "photo"=>{"files"=>[""]} 坚持为空。如前所述,我没有使用 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_string 部分的值传递什么,它总是将“文件”呈现为 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>
file 坚持输出 nil!怎么会?
【问题讨论】:
-
是的@sajan。这不是该系统中内置的第一个图像上传例程。因此,所有参数化和配置都已正确设置。在我看来,这种多文件上传的性质以及它包含一些动态创建的输入的事实是这种实现混乱的根源。我现在正试着仔细看看。
标签: ruby-on-rails image file-upload carrierwave