Rails 未更改的文件字段在使用 Carrierwave 更新嵌套表单时被删除



我有两个模型:广告变体

型号:广告

has_one :variant
accepts_nested_attributes_for :variant

控制器广告控制器强参数:

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

查看广告/_form苗条

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

在视图中,我使用循环添加了嵌套的表单字段。问题是当我创建任何广告时,假设我只上传一张变体形式 (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])

最新更新