【发布时间】:2016-11-17 09:07:24
【问题描述】:
我有一个Profile 模型:
has_many :transcripts, dependent: :destroy
accepts_nested_attributes_for :transcripts, allow_destroy: true
所以在我的app/views/profiles/_form.html.erb 上,我有以下内容:
<%= f.simple_fields_for :transcripts do |transcript| %>
<%= render 'transcript_fields', f: transcript %>
<% end %>
app/views/profiles/_transcript_fields.html.erb 看起来像这样:
<%= f.file_field :attachment, class: 'col-lg-4 form-control' %>
所以我想做的是在_transcript_fields 部分,当profile 有现有的transcripts 时,我希望它显示一个附加文件名的文件字段——如果他们这样做想要更改附加的文件,他们只需单击同一 file_field 上的上传,它就会更新该成绩单记录。
我现在可以进行实际的更新操作,但实际情况是,它只显示如下字段:
其中最上面的file_field 是现有文件,下面是一个可以添加的新字段。
【问题讨论】:
-
正如其中一个答案所说,它无法完成。它是一个安全问题。您将不得不找到另一种方法来满足您的要求。
-
如果您要使用carrierwave之类的东西来处理上传,它将允许您执行其中的一些操作,因为它可以保留文件名等。这个或者可能是重新文件。不幸的是,正如您发现的那样,您不希望您的浏览器能够对文件系统上的文件进行变异超过某个点,因此这是您遇到的安全问题。话虽如此......一旦你在控制器方法中上传了文件二进制数据。在持久化之前,您可以随意命名它。因此,一旦数据被持久化,您就可以在 Rails 端进行操作。
标签: ruby-on-rails simple-form ruby-on-rails-5