-
我
Project
有很多Tasks
. -
每个
Task
都可以使用ActiveStorage上传图像 .
在我的Project new视图中,我动态创建了嵌套表单(通过Cocoon)来创建新任务,file_field用于上传每个任务的图像 . 提交表单后,我在项目控制器中创建了一个新项目以及来自 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
我可以访问params中的单个图像:
"tasks_attributes": {
"0": { "image": ... },
"1": { "image": ... }
}
一种方法是循环遍历每个 @project.tasks
并使用相同顺序的上述参数中的图像调用 .attach
. 但这似乎很容易出错,因为params并不总是将图像附加到正确的任务中 . 如果由于无效而某些任务没有保存到db,则1对1的匹配会导致这种方法更加脆弱 .
有没有更好的办法?
Edit
出于某种原因,它现在正在运作 . 我不知道我是否改变了某些东西,或者它是原始代码......