Только что создал новое приложение Rails 6, и я пытаюсь разрешить добавлять изображения в BLOB-объект active_storage вместо их замены, через форму, созданную с помощью rails scaffold.
Следовал документации (https://guides.rubyonrails.org/active_storage_overview.html#has-many-attached), использование #attach в моем контроллере, но это приводит к появлению страницы с ошибкой и сохранению поведения по умолчанию: замена всех изображений вместо добавления новых изображений.
Использование Rails 6.0.0 с active_storage 6.0.0
Сначала я создал модель страницы, используя rails g scaffold Page name:string
, а затем добавил в свою модель page.rb связь с ActiveStorage has_many_attached :images
В своей форме я добавил поле file_, позволяющее несколько загрузок:
<%= form.file_field :images, multiple: true %>
Вот мое действие по обновлению контроллера, примечание @page.images.attach(params[:images])
, которое должно выполнять эту работу, согласно документации
def update
respond_to do |format|
if @page.update(page_params)
@page.images.attach(params[:images])
format.html { redirect_to site_pages_path(@site), notice: 'Page was successfully updated.' }
format.json { render :show, status: :ok, location: @page }
else
format.html { render :edit }
format.json { render json: @page.errors, status: :unprocessable_entity }
end
end
end
При заполнении формы, прикреплении новых изображений иразместив его, я получил следующую ошибку:
ArgumentError in PagesController#update
Could not find or build blob: expected attachable, got nil
Указывая строку @page.images.attach(params[:images])
При проверке журналов сервера я заметил, что, несмотря на ошибку,поведение по умолчанию все еще работает: старые изображения удаляются, а новые прикрепляются.