我的控制器中有以下内容在Rails 4中运行良好:
def create_multiple
params[:documents].map do |document|
if document[:upload]
doc = Document.new
doc.upload = document[:upload]
doc.category_id = @category.id
doc.save
end
end
redirect_to @category, notice: 'Documents saved'
end
现在,升级到Rails 5之后,它无效。我强烈怀疑这是因为params is now an Object, rather than HashWithIndifferentAccess,但我无法弄清楚如何让多文件上传再次工作。
试过这个:
params.to_unsafe_h[:documents].map do |document|
但是它失败了no implicit conversion of Symbol into Integer
if document[:upload]
部分。
关于如何在这方面取得进展的任何想法?
答案 0 :(得分:0)
好吧,我不得不重新修改我的表单,以便在Rim 5中使用Slim(在new_multiple视图中)更加“邋”“:
= form_tag create_multiple_category_documents_path(@category), multipart: true do
.row.bottom30
- @documents.each_with_index do |document, ndx|
= fields_for 'documents[]', document, index: ndx do |f|
.col-xs-12.col-sm-6.col-md-4.bottom30
=> f.label :title
= f.text_field :title, class: 'form-control'
= f.file_field :upload
以下是控制器中的内容:
def new_multiple
@documents = 20.times.map { @category.documents.build }
end
def create_multiple
params[:documents].each do |num, document|
unless document[:upload].blank?
doc = Document.new
doc.upload = document[:upload]
doc.category_id = @category.id
doc.save
end
end
redirect_to @category, notice: 'Documents saved'
end
可能有更好的方法可以做到这一点,但现在可以使用。