活动存储 has_many_attached 正在清除以前的上传

问题描述 投票:0回答:3

我正在尝试将更多文件添加到 has_many_attached 中,但是当我上传新文件时,以前的文件将被清除。上传多个文件确实会添加多个文件,但它们也会在下次上传时被清除。这是有意的行为吗?如果是这样,我该如何防止清除?

log.rb

class Log < ApplicationRecord
  has_many_attached :uploads
end

_form.html.erb

<%= form_for @log, remote: true do |f| %>
  <%= f.file_field :uploads, multiple: true %>
<% end %>
ruby-on-rails rails-activestorage
3个回答
7
投票

您可以通过将以下行添加到

config/environments/development.rb
config/environments/test.rb
config/environments/production.rb
来防止覆盖现有附件,如本期中的 quantavi 所示:https://github.com/richardvenneman/栈桥-active_storage/问题/41

config.active_storage.replace_on_assign_to_many = false

显然在 Rails 6 中,再次上传文件时的默认行为是清除以前上传的文件。您可以在 in this Rails issues 中找到有关它的较长线程,其中 Aarthi 在评论中链接。上面的行更改了此设置,以便连续上传附加文件而不是覆盖旧文件。

(正如您可能从问题链接中推断出的那样,我在使用 Trestle 管理面板和补充的 trestle-active_storage gem 时遇到了同样的问题,这增加了主动存储字段支持。)


1
投票

我用这样的hidden_field标签保留了我的旧资产:

<% @product.photos.each do |ph| %>
   <%= f.hidden_field :photos, multiple: true, value: ph.signed_id %>
<% end %>

这对我有用


0
投票

根据 Ruby on Rails 指南,Rails 在使用

has_many_attached
关联时会自动替换任何现有附件。

解决方案是使用图像的

signed_id
的隐藏字段,如下所示:

<% if @object.images.attached? %>
  <% @object.images.each do |image| %>
    <%= f.hidden_field :images, multiple: true, value: image.signed_id %>
  <% end %>
<% end %>

<%= f.file_field :images, multiple: true %>
© www.soinside.com 2019 - 2024. All rights reserved.