首页 > 解决方案 > 表单错误验证时,主动存储可防止客户端重新上传文件

问题描述

我有一个包含许多输入的表单,其中一个是kbis文件输入。

我的模型:

class Company < ApplicationRecord
  validates :name, presence: true
  validate :presence_kbis

  has_one_attached :kbis

  private 

  def presence_kbis
    errors.add(:kbis, :blank) unless kbis.attached?
  end
end

我创建了一个经典表单,一个输入是:

<%= f.input :kbis %>

我的问题是如果其他字段包含错误,我丢失了文件,我再次要求用户再次选择文件。我了解出于安全原因,导航器无法选择文件。但是该文件已经上传到 rails 服务器。

我的问题:

<%= f.file_field :avatar %>
<%= f.hidden_field :avatar_cache %>
<%= f.hidden_field :kbis, value: f.object.kbis.signed_id if f.object.kbis.attached?  %>
<%= f.input :kbis %>

但是当我提交时,我有例外:ActiveSupport::MessageVerifier::InvalidSignature

语境:

标签: ruby-on-railsrails-activestorage

解决方案


推荐阅读