Rails / Carrierwave: несколько файлов перезаписываются - PullRequest
0 голосов
/ 15 апреля 2020

Я следую инструкциям по https://github.com/carrierwaveuploader/carrierwave/blob/master/README.md#multiple -file-uploads

В частности, эта строка доставляет мне проблемы (я думаю):

<% user.avatars.each do |avatar| %>
  <%= hidden_field :user, :avatars, multiple: true, value: avatar.identifier %>
<% end %>
<%= form.file_field :avatars, multiple: true %>

У меня есть таблица с именем properties и связанная таблица с именем property_units, которые являются вложенными полями в свойстве, использующем драгоценный камень Cocoon.

* property_units имеет столбец файла carrierwave.

Для мои файлы ввода в представлении, у меня есть следующее:

_property_unit_fields.html.erb

        <% if f.object.files.count > 0 %>
            <div class="uploaded-files">
                <% f.object.files.each do |file| %>
                    <%= f.hidden_field :files, multiple: true, value: file.file.identifier %>
                    <p>
                        <span><%= file.file.filename %></span>
                    </p>
                <% end %>
            </div>
        <% end %>
        <%= f.file_field :files, multiple: true %>
        </div>

f на случай выше, из этой реализации Cocoon:

    <div id="property_units">
     <%= f.fields_for :property_units do |unit| %>
        <%= render 'property_unit_fields', f: unit %>
      <% end %>
      <div class='links'>
        <%= link_to_add_association 'Add Unit', f, :property_units, class: 'button button--tertiary' %>
      </div>
    </div>

Я могу сохранить файл, и установленный загрузчик работает. Я могу сохранить несколько, но если я загружу снова, предыдущие файлы будут полностью заменены.

Так, например, я только что загрузил файл с именем "tickets.pdf". Этот файл находится в базе данных.

Скрытый ввод отображается как:

<input multiple="multiple" value="tickets.pdf" type="hidden" name="property[property_units_attributes][0][files][]" id="property_property_units_attributes_0_files">

После загрузки нового файла "tickets.pdf" будет удален .

Что я делаю не так?

Редактировать, вот журнал с момента его загрузки

Файл, который уже существует и на который есть ссылка в скрытом вводе, является tickets.pdf и новый загруженный файл - ActionDispatch.

Итак, очевидно, он отправляет строку, и Carrierwave ожидает файл. но это то, что говорится в документации. Так что я не знаю, что еще должно быть помещено в запрос

"files"=>["tickets.pdf", #<ActionDispatch::Http::UploadedFile:0x00007fd6dc275118 @tempfile=#<Tempfile:/tmp/RackMultipart20200415-3213-10sfy1b.pdf>, @original_filename="somefile.pdf", @content_type="application/pdf", @headers="Content-Disposition: form-data; name=\"property[property_units_attributes][0][files][]\"; filename=\"somefile.pdf\"\r\nContent-Type: application/pdf\r\n">], "_destroy"=>"false", "id"=>"1"}},

Так что теперь "somefile.pdf" - единственный файл, который у меня есть, и в столбце БД он выглядит как {NULL,"\"somefile.pdf\""}

NULL - билеты

1 Ответ

0 голосов
/ 15 апреля 2020

Вы должны обработать этот лог c вручную, Carrierwave не имеет нескольких дополнительных загрузок файлов из коробки.

https://github.com/carrierwaveuploader/carrierwave/wiki/How-to: - Добавить-больше-файлов-и-удалить- одним файлом, когда-используя по умолчанию многодисковых файлов загрузки-функция

...