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匹配将失效,从而使该方法更加脆弱。
有更好的方法吗?
修改
由于某种原因,它现在可以正常工作。我不知道我是否更改了某些内容或它是原始代码...