Carrierwave 或 Paperclip:更新其他表单字段时保留 image/file
Carrierwave or Paperclip: Keep image/file when updating other form fields
当使用 Carrierwave 或 Paperclip 时,除 edit/update 外,一切都按预期工作。当记录存在图像或文件时,如果您没有明确上传另一个文件,则在保存时它会设置为 nil。
我一直在寻找但尚未找到的解决方案允许更新其他表单字段但保留现有文件。当然,除非文件也更新了。
我的设置使用的是嵌套模型,因此对于 Carrierwave 和 Paperclip 我已经尝试了以下但没有成功。
显然我遗漏了什么,但我终究无法弄清楚是什么。
非常感谢任何帮助。
我将 Paperclip 与 nested_form 一起使用,它非常简单,不足为奇。
您确定检查嵌套记录是新记录还是已经存在?如果 file_field 实际上是一条新记录,您只想显示它,否则显示图像(或除 file_field 之外的任何内容)。然而,这就是您的 link 已经解释过的内容。
另外,您可以 post 提交时发送了哪些参数 - 检查您的日志以执行此操作。
好的,在用 pry 进行一些挖掘之后,我找到了 a/the 解决方案。首先,这是设置。
模特
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 被传递到 part_attributes 中,我相信是 carrierwave。当 part_attributes 不考虑它时,它会导致 carrierwave 在更新时转储图像参考。
因此,如果您有一个嵌套表单并且您的图像在更新时不断消失,请尝试将 :id 添加到 xxxxx_attributs。它适用于 Carrierwave,但我认为这没有理由不适用于 Paperclip。如果我有时间,我会切换并报告。
当使用 Carrierwave 或 Paperclip 时,除 edit/update 外,一切都按预期工作。当记录存在图像或文件时,如果您没有明确上传另一个文件,则在保存时它会设置为 nil。
我一直在寻找但尚未找到的解决方案允许更新其他表单字段但保留现有文件。当然,除非文件也更新了。
我的设置使用的是嵌套模型,因此对于 Carrierwave 和 Paperclip 我已经尝试了以下但没有成功。
显然我遗漏了什么,但我终究无法弄清楚是什么。
非常感谢任何帮助。
我将 Paperclip 与 nested_form 一起使用,它非常简单,不足为奇。
您确定检查嵌套记录是新记录还是已经存在?如果 file_field 实际上是一条新记录,您只想显示它,否则显示图像(或除 file_field 之外的任何内容)。然而,这就是您的 link 已经解释过的内容。
另外,您可以 post 提交时发送了哪些参数 - 检查您的日志以执行此操作。
好的,在用 pry 进行一些挖掘之后,我找到了 a/the 解决方案。首先,这是设置。
模特
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 被传递到 part_attributes 中,我相信是 carrierwave。当 part_attributes 不考虑它时,它会导致 carrierwave 在更新时转储图像参考。
因此,如果您有一个嵌套表单并且您的图像在更新时不断消失,请尝试将 :id 添加到 xxxxx_attributs。它适用于 Carrierwave,但我认为这没有理由不适用于 Paperclip。如果我有时间,我会切换并报告。