Как удалить или обновить ранее загруженное изображение в Actveadmin после загрузки нового изображения? - PullRequest
0 голосов
/ 09 июля 2020

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

Модель администратора:

f.inputs do
     
      f.input :image, as: :file, hint: (f.object.image.attached?) ? image_tag(url_for(f.object.image)) : content_tag(:span, "JPG oder PNG")
      if f.object.image.present?
        f.input :remove_image, as: :boolean, required: false, label: "Remove"
      end
end

f.actions

Модель:

  belongs_to :parent
  default_scope { order(:position) }
  has_one_attached :image, :dependent => :destroy
  attr_writer :remove_image
  validates :image, blob: { content_type: ['image/png', 'image/jpg', 'image/jpeg'] }
  before_validation :image_delete

  def remove_image
    @remove_image || false
  end

  def image_delete
    self.image.purge if self.remove_image == '1'
  end

1 Ответ

0 голосов
/ 09 июля 2020

Ну, я отправляю свой ответ на случай, если он кому-то поможет в будущем. Это довольно просто, но немного сложно. Мне пришлось немного скорректировать свою модель.

Удалено before_validation

Модель:

      belongs_to :parent
      default_scope { order(:position) }
      has_one_attached :image, :dependent => :destroy
      attr_writer :remove_image
      validates :image, blob: { content_type: ['image/png', 'image/jpg', 'image/jpeg'] }

     def remove_image
      @remove_image || false
     end

В модели администратора внутри controller вызывается метод update при отправке формы. Использовалось простое удаление исходного изображения и сохранение нового из params

def update

      v = Model.find( params[:id] )

      if params[:model][:image].present?
        v.image.purge
        v.image = params[:model][:image]
      end

      if params[:model][:remove_image].present? && params[:model][:remove_image] == '1'
          v.image.purge
      end

      if v.save
        redirect_to model_path(v)
      else
        render :edit
      end

    end

, так как я также удаляю изображение по отдельности remove_image. Еще источник: https://spin.atomicobject.com/2016/01/29/uploading-files-active-admin/

...