【发布时间】:2019-09-10 05:31:35
【问题描述】:
我有两个模型:ad 和 variant
模型:广告
has_one :variant
accepts_nested_attributes_for :variant
Controller 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。
【问题讨论】:
-
我认为,如果添加accepts_nested_attributes_for :variant,我们必须添加 optional: true 到belongs_to :ad,以使两种用法都起作用
-
@Rakesh 如何在 rails 4 中添加
optional: true?这是 Rails 5+ 的功能 -
我没有注意到标签,对不起。
标签: ruby-on-rails-4 file-upload carrierwave nested-forms