ruby-on-rails - 表单错误验证时,主动存储可防止客户端重新上传文件
问题描述
我有一个包含许多输入的表单,其中一个是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 服务器。
我的问题:
- 有没有办法使用已经上传的文件?在 CarrierWawe 中,我们可以这样做:
<%= 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
- 我想我已经正确理解了成功时如何存储数据,但我不清楚不同的步骤。它是在验证之前还是之后存储?文件在哪里验证失败?它在http请求后被删除?如果不是什么时候删除?
语境:
- 红宝石
3.0.1
- 导轨
6.1.3.1
- 环境:
development
- 磁盘存储:
local
- 我用
simple_form
解决方案
推荐阅读
- matomo - matomo 内容跟踪未通过仪表板
- python - 使用自动编码器降维后对数据进行聚类
- excel - 有没有办法在 Excel 中的 VBA 格式条件内编写与本地语言无关的公式?
- javascript - Ajax 查询将 dom 作为数据返回,而不是我数据库中的数据
- windows-services - 使用 rohitab API monitor 监控 Windows 服务启动
- c# - 使用 IQueryable 连接几个表
- html - 如何在左侧制作带有圆圈的水平边框
- windows - 如何让 Windows gitlab runner 启动管理 shell
- c# - 如何在 Azure Pipeline 上获得测试覆盖率?
- python - 如何通过变量中的索引调用 pd.Dataframe?