Как добавить картинку к модели (пользователю) в Rails с помощью ActiveStorage и виджета Cloudinary Upload?

#ruby-on-rails #cloudinary

#ruby-on-rails #cloudinary

Вопрос:

мир!

После внедрения интеграции активного хранилища Cloudinary легко заставить его работать в форме.

Нам просто нужно добавить в наш simple_form_for

   <%= f.input :photo, as: :file %>  
  

НО, если мы хотим использовать виджет загрузки Cloudinary, нет простого способа добавить этот файл в form .

Что я пробовал: 1- разрешить виджету загружать изображение; 2- обновить значение скрытого ввода URL-адресом загруженного изображения; 3- в контроллере при создании модели загрузите изображение и прикрепите его к модели:

   require 'open-uri'
  file = URI.open(photo_url)
  @user.photo.attach(io: file, filename: 'profile_photo.jpg') 

  # [...]

  private

  def photo_url
    params.require(:user).permit(:photo_url)[:photo_url]
  end
  

Это работает, НО оно загружает дважды одно и то же изображение и — ИМХО — крайне неэффективно.

Есть идеи?

Спасибо!

Удачи, получайте удовольствие!

Комментарии:

1. Я не вижу способа напрямую перейти из виджета загрузки в ActiveStorage. ActiveStorage очень ограничен, и нет хорошего способа указать, где находится файл для записи ActiveStorage. Недавно я удалил ActivesStorage из проекта по этой причине и из-за проблем с масштабируемостью, которые он вызывает. Короче говоря, я не думаю, что то, что вы ищете, можно сделать. Ваш единственный шанс edgeguides.rubyonrails.org/… что может позволить вам передать событие JS из виджета в прямую загрузку