为什么我需要在验证失败后再次选择图像

时间:2017-10-26 05:41:51

标签: ruby-on-rails activerecord activeadmin carrierwave polymorphic-associations

我有两个型号

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

当我提交包含错误信息的表单时,可以说没有标题和验证失败,为什么我需要在第一次提交时选择再次选择图像

2 个答案:

答案 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框架的同样问题。