Sign in

Зарегистрируйтесь, чтобы стать полноправным участником сообщества Masterpro.ws.

Включаем Active Storage и загрузку изображений в Amazon S3. Part 2

Продолжение материала Включаем Active Storage и загрузку изображений в Amazon S3. Реализуем в панели администрирования Active Admin управление изображениями для блога - загрузку и удаление - локально либо на серверах Amazon S3.

Using Ruby on Rails Active Storage image uploads for Active Admin backed resources

 

How to Build an Image Upload Feature with Rails, Active Admin and Active Storage
How to Build an Image Upload Feature with Rails, Active Admin and Active Storage

 

Взглянуть Blog on Rails на Heroku.

Увидеть на гитхабе.

 

ActiveAdmin.register Slider do
  permit_params :published_at, :name, images: []

  scope :all
  scope :published
  scope :unpublished

  action_item :publish, only: :show do
    link_to 'Publish', publish_admin_slider_path(slider), method: :put unless slider.published_at?
  end

  action_item :unpublish, only: :show do
    link_to 'Unpublish', unpublish_admin_slider_path(slider), method: :put if slider.published_at?
  end

  action_item :delete_images, only: :show do
    link_to 'Delete Images', delete_images_admin_slider_path(slider), method: :delete if slider.images.attached?
  end

  member_action :publish, method: :put do
    slider = Slider.find(params[:id])
    slider.update(published_at: Time.zone.now)
    redirect_to admin_slider_path(slider)
  end

  member_action :unpublish, method: :put do
    slider = Slider.find(params[:id])
    slider.update(published_at: nil)
    redirect_to admin_slider_path(slider)
  end

  member_action :delete_images, method: :delete do
    slider = Slider.find(params[:id])
    slider.images.purge_later
    redirect_to admin_slider_path(slider)
  end

  form do |f|
    f.inputs 'Slider' do
      f.input :name
      f.input :images, as: :file, input_html: { multiple: true }
    end
    f.actions
  end
  show do |t|
    attributes_table do
      if t.images.attached?
          t.images.each do |img|
            span do
              image_tag img.variant(resize_to_limit: [100, 100])
            end
          end
      end
      row :name
      row :created_at
      row :updated_at
      row :published_at
    end
  end
end

 

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

Ну вот как-то так, например. Вполне рабочий вариант, хотя и незамысловатый. Удаление одной иллюстрации по клику на ее пиктограмме:

 

  member_action :delete_image, method: :delete do
    slider = Slider.find_by(params[:name])
    slider.images[params[:id].to_i].purge_later
    redirect_to admin_slider_path(slider)
  end

  if t.images.attached?
     t.images.each_with_index do |img, index|
        span do
          link_to delete_image_admin_slider_path(index), method: :delete do
              image_tag img.variant(resize_to_limit: [100, 100])
           end
         end
      end
   end

 

Оставить комментарий

Добавьте ваш комментарий

Комментарии в блоге

  • Рамат Они до сих пор такую шляпу предлагают с оформлением в известную американскую компанию через ИП или самозанятого, на прошлой неделе…

    Пятница, 15 января 2021

    Опубликовано в: Про IT Selection, gray salary и Барака Обаму
  • serge Да вроде на месте ссылки, Вася. Чем не устраивает сайт разработчика и его github?

    Четверг, 17 декабря 2020

    Опубликовано в: Fakeloader.js
  • Вася А где ссылки на скрипты? или их нет? скачивать нечего?

    Четверг, 17 декабря 2020

    Опубликовано в: Fakeloader.js
  • Aleksej This is a very old project, Lukas. Support has ended.

    Воскресенье, 06 декабря 2020

    Опубликовано в: Category Product Combinations. Prestashop module
  • Lukas Hi. Not working properly for 1.7.7

    Воскресенье, 06 декабря 2020

    Опубликовано в: Category Product Combinations. Prestashop module