【问题标题】:rails unchanged file fields got deleted on updating nested forms with carrierwave在使用carrierwave更新嵌套表单时,rails未更改的文件字段被删除
【发布时间】:2019-09-10 05:31:35
【问题描述】:

我有两个模型:advariant

模型:广告

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


【解决方案1】:

希望有人会觉得这很有用:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多