Сохранение миниатюр ActiveStorage - PullRequest
0 голосов
/ 26 июня 2018

Я перенес мое Rails-приложение на 5.2.0.До того, как я использовал скрепку.Скрепка генерирует различные варианты, такие как миниатюра и аватар, когда изображение загружено.Как я могу добиться этого с ActiveStorage?Я знаю, что мы можем сделать это user.avatar.variant(resize_to_fit: [100, 100]), но для меня это все равно что делать это снова и снова.Я собираюсь выполнить предварительную обработку этих вариантов после их загрузки.

Также вы, ребята, можете предложить лучшую технику, если это плохо из вашего опыта.

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Использование .processed - это правильный способ проверить, был ли этот вариант уже обработан и загружен в службу хранения.

Одна вещь, которую Paperclip прекрасно выполнил, - это объект styles: {}, в котором можно перечислитьвсе различные преобразования, которые вы хотели сделать для миниатюр и т. д., и назовите их.

Вот как я обрабатываю именованные и сохраненные преобразования.Это также сокращает синтаксис моего шаблона:

class Image < ActiveRecord::Base
  has_one_attached :image_file

  def self.sizes
    {
      thumbnail: { resize: "100x100" },
      hero1:     { resize: "1000x500" }
    }
  end

  def sized(size)
    self.image_file.variant(Image.sizes[size]).processed
  end

end

Затем в шаблоне, скажем, у меня есть @image, я могу просто позвонить @image.sized(:hero1)

0 голосов
/ 28 июня 2018

@ aguardientico правильно, добавив метод .processed к вашему варианту объекта, который будет использовать ключ blob, чтобы проверить, существует ли файл в вашем сервисе, прежде чем пытаться заново воспроизвести весь процесс.

Кроме того, необходимо также знать, что resize_to_fit - это метод преобразования гемов ImageProcessing, который еще не поддерживается Rails 5.2.Вместо этого прямо сейчас он использует MiniMagick, где вы добавляете > к методу resize для скрепки.

, поэтому переписать его будет похоже на user.avatar.variant(resize: "100x100>")

...