Как правильно обновлять изображения с помощью has_many_attached в Rails 6 - PullRequest
1 голос
/ 18 января 2020

У меня есть приложение Rails 6, которое использует Active Storage для хранения нескольких изображений в модели (Activity) с has_many_attached.

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

Как добавить новое изображение вместо замены предыдущих изображений?

У меня есть модель Activity, которая имеет следующее:

has_many_attached :images

В форме у меня есть:

<%= f.file_field :images, multiple: true %>

В контроллере у меня есть следующее:

def update
  @activity = Activity.find(params[:id])

  if @activity.update(activity_params)
    flash[:success] = "Saved"
    redirect_to activity_path(@activity)
  else
    flash[:error] = "Not saved"
    redirect_to edit_activity_path(@activity)
  end
end

private

  def activity_params
    params.require(:activity).permit(:name, images:[])
  end

Ответы [ 2 ]

2 голосов
/ 20 января 2020

Это решение, которое у меня сейчас есть:

Добавьте это к действию обновления:

if params[:activity][:images].present?
  params[:activity][:images].each do |image|
  activity.images.attach(image)
end

Итак, все действие обновления выглядит так:

def update
  if activity.update(activity_params)
    if params[:activity][:images].present?
      params[:activity][:images].each do |image|
        activity.images.attach(image)
      end
    end
    flash[:success] = 'Updated!'
    respond_with activity, location: activity_path(activity)
  else
    flash[:error] = 'Not updated'
    respond_with activity, location: activity_path(activity)
  end
end

И уберите это из разрешенных параметров:

images:[]
0 голосов
/ 20 января 2020

Попробуйте выбрать несколько файлов, подобных этому https://i.stack.imgur.com/EqaU7.png Если это сработает, вам нужно будет выбрать все предыдущие изображения при загрузке нового, что не очень хорошо звучит. Вы можете использовать вложенные формы.

...