rails 在使用载波更新嵌套表单时删除了未更改的文件字段

rails unchanged file fields got deleted on updating nested forms with carrierwave

我有两个模型:advariant

型号:广告

has_one :variant
accepts_nested_attributes_for :variant

控制器AdsController强参数:

params.require(:ad).permit(:title, :desc, variant_attributes: [:custom_image_1, :custom_image_2, :custom_image_3])

查看ads/_form.slim

= f.fields_for :variant, @ad.variant || Variant.new do |va|
  - 3.times do |i|
    = va.file_field "custom_image_#{i+1}"

在视图中,我使用循环添加了嵌套的表单字段。问题是当我创建任何 AD 时,假设我只上传了一张变体形式的图像 (custom_image_1)。现在,我回来编辑并上传了另一张关于变体的图片 (custom_image_2)。 更新后,我看到我之前上传的 custom_image_1 被删除了,数据库中只存在 custom_image_2

背后的原因是什么?

我在提交编辑表单时检查了params。提交的属性中只包含 custom_image_2

希望有人会觉得有用:

在我的强参数中,我需要包含:id来解决这个问题。

params.require(:ad).permit(:title, :desc, variant_attributes: [:id, :custom_image_1, :custom_image_2, :custom_image_3])