我有两个型号
class ComfortFactorSubCategory < ApplicationRecord
has_one :image, as: :imageable, dependent: :destroy
validates :heading, presence: true
accepts_nested_attributes_for :image, :reject_if => lambda { |a| a[:name].blank? }, allow_destroy: true
end
class Image < ApplicationRecord
belongs_to :imageable, polymorphic: true
mount_uploader :name, IconUploader
end
和我的admin / comfort_factor_sub_category.rb我有这些行
ActiveAdmin.register ComfortFactorSubCategory do
permit_params do
permitted = [:heading, image_attributes: [:name, :_destroy, :id], additional_instruction_ids: []]
permitted
end
form do |f|
f.inputs do
f.input :heading
f.input :additional_instructions, as: :select, collection: AdditionalInstruction.pluck(:description, :id)
f.fields_for :image do |b|
b.input :name, label: "Image", :as => :file
end
end
f.actions
end
end
当我提交包含错误信息的表单时,可以说没有标题和验证失败,为什么我需要在第一次提交时选择再次选择图像
答案 0 :(得分:1)
似乎您需要f.hidden_filed :name_cache
来缓存上传的文件
查看CarrierWave making uploads work across form redisplays部分和upload through accept_nested_attributes_for
wiki文章
答案 1 :(得分:0)
出于安全原因,这受到浏览器的限制。它避免了在呈现错误页面时使用默认文件对象的值预先填充表单。
这是一个detailed excerpt。
但浏览器通常不支持此操作。通常 解释是“安全原因。”事实上,这将是一种安全 如果用户磁盘上的文件是在没有用户的情况下提交的,则存在风险 内容。引诱一些用户提交可能太容易了 一些密码文件!
我还发现这个another answer谈论ASP.net框架的同样问题。