当文件存在时,如何在simple_form中更改文件字段的名称?

mar*_*ion 2 ruby-on-rails simple-form ruby-on-rails-5

我有一个Profile模型:

  has_many :transcripts, dependent: :destroy
  accepts_nested_attributes_for :transcripts, allow_destroy: true
Run Code Online (Sandbox Code Playgroud)

所以在我看来app/views/profiles/_form.html.erb,我有以下几点:

      <%= f.simple_fields_for :transcripts do |transcript| %>
        <%= render 'transcript_fields', f: transcript %>
      <% end %>
Run Code Online (Sandbox Code Playgroud)

app/views/profiles/_transcript_fields.html.erb看起来像这样:

<%= f.file_field :attachment, class: 'col-lg-4 form-control' %>
Run Code Online (Sandbox Code Playgroud)

所以我想做的就是_transcript_fields部分,当profile存在时transcripts,我希望它显示一个文件字段,其中包含附加文件的名称 - 如果他们想要更改附加的文件,他们可以只是点击相同的上传,file_field它将更新该Transcript记录.

我现在有实际的更新操作,但是会发生什么,它只是显示如下字段:

在此输入图像描述

top file_field是现有文件,bottom是反映可以添加的新字段.

Ank*_*dey 6

你不能.

设置文件输入值的唯一方法是当用户从他的系统中选择一个文件时.如果你强行这样做,它将在HTML中像这样.

<form name="foo" method="post" enctype="multipart/form-data">
  <input type="file" value="c:/rails.png">
</form>
Run Code Online (Sandbox Code Playgroud)

这是出于安全原因.否则,您将能够创建一个自动从客户端计算机上传特定文件的Javascript,但如果您想要上传文件字段的某些编辑功能,您可能想要做的是:

  1. 只需打印文件名或URL,下载它的可点击链接,或者它是图像,显示该字段的当前值:只显示它,可能是缩略图.
  2. file_field上传新文件.
  3. 一个复选框,选中此选项后,将删除当前上载的文件.请注意,没有办法上传"空"文件,所以你需要这样的东西来清除字段的值.

希望我回答你的问题.