rails 在使用载波更新嵌套表单时删除了未更改的文件字段
rails unchanged file fields got deleted on updating nested forms with carrierwave
我有两个模型:ad 和 variant
型号:广告
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])
我有两个模型:ad 和 variant
型号:广告
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])