如何在Rails 5中运行多个文件上传?

时间:2016-07-14 19:37:22

标签: ruby-on-rails ruby-on-rails-5

我的控制器中有以下内容在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]部分。

关于如何在这方面取得进展的任何想法?

1 个答案:

答案 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

可能有更好的方法可以做到这一点,但现在可以使用。