首页 > 解决方案 > 编辑表单时如何显示 Active Storage 附件?

问题描述

我正在构建一个协议管理应用程序。每个协议都有供应商、激活、到期日期和文件。文件是 pdf 格式的附加协议。我使用 Active Storage 附加文件。当我编辑表格时,我看不到附件。因此,如果我更改任何其他参数,比如说供应商并更新协议,则先前附加的文件将被删除。

编辑协议表格

如果我在编辑时不上传任何其他文件,我应该怎么做才能使附加的文件名在更新时出现并且不会被删除?

更新:

这是代码。除了将 :file 添加到允许的参数之外,我没有对生成的协议控制器进行任何调整。

agreement.rb

class Agreement < ApplicationRecord
  belongs_to :vendor
  has_one_attached :file  
end


agreements_controller.rb

class AgreementsController < ApplicationController
  def agreement_params
    params.require(:agreement).permit(:vendor_id, :activation_date, :expiration_date, :file)
  end
end


_form.html.erb

<%= form_with(model: agreement, local: true) do |form| %>
…
<div class="field">
    <%= form.label :file %>
    <%= form.file_field :file %>
 </div>

  <div class="actions">
    <%= form.submit %>
  </div>
<% end %>

标签: ruby-on-railsrails-activestorage

解决方案


添加协议模型

attribute :remove_file, :boolean,  default: false
after_save :purge_file, if: :remove_file

推荐阅读