如何使用ActiveStorage以嵌套形式上传文件?

时间:2018-09-18 07:15:12

标签: ruby-on-rails ruby ruby-on-rails-5 cocoon-gem rails-activestorage

  • 我有Project,其中有许多Tasks
  • 每个Task都可以使用ActiveStorage上传图像。

在“项目”新视图中,我动态创建了嵌套表单(通过Cocoon)来创建新任务,并创建了file_field来为每个任务上传图像。提交表单后,我将在Project控制器中创建一个新项目以及project_params中的新任务。但是创建项目后如何使用ActiveStorage附加每个任务的映像?

class Project < ApplicationRecord
  has_many :tasks
end

class Task < ApplicationRecord
  belongs_to :project
end

嵌套表格视图

<%= form_for @project do |f| %>
    <%= f.fields_for :tasks do |ff| %>
        <%= ff.file_field :image %>
    <% end %>
<% end %>

项目负责人

class ProjectController
  def create
    @project = Project.new(project_params)
    @project.save
    ...
    # How should I attach task images here?
  end
end

我可以在参数中访问单个图像:

"tasks_attributes": {
  "0": { "image": ... },
  "1": { "image": ... }
}

一种方法是遍历每个@project.tasks,并以相同顺序从上面的参数中调用图像上的.attach。但这似乎容易出错,因为params不能为我提供与保存的任务匹配的任务ID,所以我担心我不会总是将图像附加到正确的任务上。如果某些任务由于无效而没有保存到db,则1对1匹配将失效,从而使该方法更加脆弱。

有更好的方法吗?

修改

由于某种原因,它现在可以正常工作。我不知道我是否更改了某些内容或它是原始代码...

0 个答案:

没有答案