Я следую инструкциям по 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 - билеты