【问题标题】:Carrierwave or Paperclip: Keep image/file when updating other form fieldsCarrierwave 或 Paperclip:更新其他表单字段时保留图像/文件
【发布时间】:2015-04-22 23:45:40
【问题描述】:

使用 Carrierwave 或 Paperclip 时,除了编辑/更新外,一切都按预期工作。如果记录存在图像或文件,如果您没有明确上传另一个文件,则保存时将其设置为 nil。

我一直在寻找但尚未找到的解决方案是允许更新其他表单字段但保留现有文件的解决方案。当然,除非文件也被更新。

我的设置使用嵌套模型,因此对于 Carrierwave 和 Paperclip,我尝试了以下方法均未成功。

https://github.com/carrierwaveuploader/carrierwave/wiki/How-to%3A-keep-%28not-replace%29-files-on-nested-edits

显然我错过了一些东西,但我终其一生都无法弄清楚是什么。

非常感谢任何帮助。

【问题讨论】:

    标签: ruby-on-rails paperclip carrierwave nested-forms


    【解决方案1】:

    我将 Paperclip 与 nested_form 一起使用,它很简单,没有任何意外。

    您确定检查您的嵌套记录是新记录还是已经存在?如果它实际上是一条新记录,您只想显示 file_field,否则显示图像(或除 file_field 之外的任何内容)。但是,这就是您的链接已经解释的内容。

    此外,您能否发布提交时发送的参数 - 检查您的日志以执行此操作。

    【讨论】:

    • 您好thirdsun 感谢您的回复。我刚刚把它弄出来了。请回答我的问题。
    【解决方案2】:

    好的,经过一番挖掘后,我找到了解决方案。首先,这是设置。

    模型

    class Machine < ActiveRecord::Base
      has_many :parts
      accepts_nested_attributes_for :parts
    end
    
    class Part < ActiveRecord::Base
      belongs_to :machine
    end
    

    表格

    = simple_form_for @machine do |m|
      ..... A bunch of inputs left out for brevity...
      = m.simple_fields_for :parts do |p|
        = p.input :name
        = p.input :location
        = p.input :price
        = p.file_field :image
    

    在原始机器控制器中 - machine_posting_params

    def machine_posting_params
        params.require(:machine).permit(:name, part_attributes: [:name, :location, :price, :image])
    end
    

    在工作的机器控制器中 - machine_posting_params

    def machine_posting_params
        params.require(:machine).permit(:name, part_attributes: [:name, :location, :price, :image, :id])
    end
    

    我找不到任何文档的问题是 :id 正在通过我相信carrierwave 传递到part_attributes。当 part_attributes 没有考虑到它时,它会导致carrierwave 在更新时转储图像参考。

    因此,如果您有一个嵌套表单并且您的图像在更新时不断消失,请尝试将 :id 添加到 xxxxx_attributs。它适用于 Carrierwave,但我认为这对 Paperclip 不起作用。如果我有时间,我会切换并回来报告。

    【讨论】:

      猜你喜欢
      • 2013-07-22
      • 1970-01-01
      • 2020-06-06
      • 2016-03-06
      • 2021-08-12
      • 2015-04-18
      • 1970-01-01
      • 2019-05-11
      • 1970-01-01
      相关资源
      最近更新 更多