【问题标题】:How can I get multiple file uploads working in Rails 5?如何在 Rails 5 中上传多个文件?
【发布时间】:2016-10-12 00:47:56
【问题描述】:

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

关于如何推进这方面的任何想法?

【问题讨论】:

  • 看来document是一个数组?你不能用debugger 或一些日志来验证吗?

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


【解决方案1】:

好的,我必须修改我的表单以使其在 Rails 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

可能有更好的方法可以做到这一点,但目前可行。

【讨论】:

    猜你喜欢
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 2015-09-30
    相关资源
    最近更新 更多