Spec-Zone.ru › Ruby on Rails 5.2

класс ActiveStorage::Variant

Родитель:
Объект
Включенные модули:
ActiveStorage::Downloading

Изображения могут иметь варианты, которые являются результатом набора преобразований, применённых к оригиналу. Эти варианты используются для создания миниатюр, аватаров фиксированного размера или любых других производных изображений из оригинала.

Варианты полагаются на MiniMagick для фактических преобразований файла, поэтому вы должны добавить gem "mini_magick" в свой Gemfile, если хотите использовать варианты.

Обратите внимание, что для создания варианта необходимо загрузить весь файл BLOB из сервиса и загрузить его в память. Чем больше изображение, тем больше используется памяти. Из-за этого процесса также следует учитывать, когда вариант фактически обрабатывается. Например, не следует обрабатывать варианты в шаблоне. Отложите обработку до контроллера по требованию, например, такого, как предоставленный в ActiveStorage::RepresentationsController.

Чтобы сослаться на такой отложенный вариант по требованию, просто укажите ссылку на вариант через разрешённый маршрут, предоставленный Active Storage, как показано ниже:

<%= image_tag Current.user.avatar.variant(resize: "100x100") %>

Это создаст URL для этого конкретного BLOB с этим конкретным вариантом, который ActiveStorage::RepresentationsController затем сможет произвести по требованию.

Когда вам действительно нужно создать необходимый вариант, вызовите processed. Это проверит, был ли вариант уже обработан и загружен в сервис, и, если да, просто вернёт его. В противном случае он выполнит преобразования, загрузит вариант в сервис и вернёт себя снова. Пример:

avatar.variant(resize: "100x100").processed.service_url

Это создаст и обработает вариант аватара BLOB, ограниченного высотой и шириной 100. Затем он загрузит указанный вариант в сервис в соответствии с ключом производного BLOB и преобразованиями.

Список всех возможных преобразований доступен по адресу www.imagemagick.org/script/mogrify.php. Вы можете свободно комбинировать их сколько угодно:

avatar.variant(resize: "100x100", monochrome: true, rotate: "-90")

Константы

WEB_IMAGE_CONTENT_TYPES

Атрибуты

blob[Ч]
variation[Ч]

Публичные методы класса

new(blob, variation_or_variation_key) Показать исходный код
# File activestorage/app/models/active_storage/variant.rb, line 47
def initialize(blob, variation_or_variation_key)
  @blob, @variation = blob, ActiveStorage::Variation.wrap(variation_or_variation_key)
end

Публичные методы экземпляра

image() Показать исходный код
# File activestorage/app/models/active_storage/variant.rb, line 75
def image
  self
end

Возвращает принимаемый вариант. Позволяет использовать экземпляры ActiveStorage::Variant и ActiveStorage::Preview взаимозаменяемо.

key() Показать исходный код
# File activestorage/app/models/active_storage/variant.rb, line 58
def key
  "variants/#{blob.key}/#{Digest::SHA256.hexdigest(variation.key)}"
end

Возвращает комбинированный ключ BLOB и варианта, которые вместе идентифицируют определённый вариант.

processed() Показать исходный код
# File activestorage/app/models/active_storage/variant.rb, line 52
def processed
  process unless processed?
  self
end

Возвращает сам экземпляр варианта после его обработки или при обнаружении существующей обработки в сервисе.

service_url(expires_in: service.url_expires_in, disposition: :inline) Показать исходный код
# File activestorage/app/models/active_storage/variant.rb, line 70
def service_url(expires_in: service.url_expires_in, disposition: :inline)
  service.url key, expires_in: expires_in, disposition: disposition, filename: filename, content_type: content_type
end

Возвращает URL варианта в сервисе. Этот URL предназначен для краткосрочного использования в целях безопасности и не должен использоваться напрямую с пользователями. Вместо этого service_url должен предоставляться только в качестве редиректа от стабильного, возможно, авторизованного URL. Скрытие service_url за редиректом также даёт вам возможность изменять сервисы без обновления всех URL. И это позволяет кешировать постоянные URL, которые перенаправляют на service_url в представлении.

Используйте url_for(variant) (или неявную форму, такую как +link_to variant+ или +redirect_to variant+), чтобы получить стабильный URL для варианта, который указывает на ActiveStorage::RepresentationsController, который в свою очередь будет использовать этот service_call метод для своего перенаправления.

© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API