Spec-Zone.ru › Ruby on Rails 7.2

модуль ActiveStorage::Blob::Representable

Открытые методы экземпляра

preview(transformations) Показать исходный код
# File activestorage/app/models/active_storage/blob/representable.rb, line 63
def preview(transformations)
  if previewable?
    ActiveStorage::Preview.new(self, transformations)
  else
    raise ActiveStorage::UnpreviewableError
  end
end

Возвращает экземпляр ActiveStorage::Preview с набором transformations. Предварительный просмотр — это изображение, сгенерированное из неизобразительного объекта blob. Active Storage поставляется со встроенными предварительными просмотрщиками для видео и PDF-документов. Предварительный просмотрщик видео извлекает первый кадр из видео, а предварительный просмотрщик PDF — первую страницу из PDF-документа.

blob.preview(resize_to_limit: [100, 100]).processed.url

Избегайте синхронной обработки предварительных просмотров в представлениях. Вместо этого используйте ссылку на действие контроллера, которое обрабатывает их по требованию. Active Storage предоставляет один, но вы можете создать свой собственный (например, если вам нужна аутентификация). Вот как использовать встроенную версию:

<%= image_tag video.preview(resize_to_limit: [100, 100]) %>

Этот метод вызывает исключение ActiveStorage::UnpreviewableError, если ни один предварительный просмотрщик не принимает получаемый объект blob. Чтобы определить, принимается ли объект blob любым предварительным просмотрщиком, вызовите ActiveStorage::Blob#previewable?.

previewable?() Показать исходный код
# File activestorage/app/models/active_storage/blob/representable.rb, line 72
def previewable?
  ActiveStorage.previewers.any? { |klass| klass.accept?(self) }
end

Возвращает true, если любой зарегистрированный предварительный просмотрщик принимает объект blob. По умолчанию это будет true для видео и PDF-документов.

representable?() Показать исходный код
# File activestorage/app/models/active_storage/blob/representable.rb, line 97
def representable?
  variable? || previewable?
end

Возвращает true, если объект blob является переменным или допускает предварительный просмотр.

representation(transformations) Показать исходный код
# File activestorage/app/models/active_storage/blob/representable.rb, line 85
def representation(transformations)
  case
  when previewable?
    preview transformations
  when variable?
    variant transformations
  else
    raise ActiveStorage::UnrepresentableError
  end
end

Возвращает ActiveStorage::Preview для объекта blob, допускающего предварительный просмотр, или ActiveStorage::Variant для переменного изображения blob.

blob.representation(resize_to_limit: [100, 100]).processed.url

Вызывает исключение ActiveStorage::UnrepresentableError, если получаемый объект blob не является ни переменным, ни допускающим предварительный просмотр. Вызовите ActiveStorage::Blob#representable?, чтобы определить, допускает ли объект blob представление.

См. ActiveStorage::Blob#preview и ActiveStorage::Blob#variant для получения дополнительной информации.

variable?() Показать исходный код
# File activestorage/app/models/active_storage/blob/representable.rb, line 44
def variable?
  ActiveStorage.variable_content_types.include?(content_type)
end

Возвращает true, если процессор вариантов может преобразовать объект blob (его тип содержимого находится в ActiveStorage.variable_content_types).

variant(transformations) Показать исходный код
# File activestorage/app/models/active_storage/blob/representable.rb, line 34
def variant(transformations)
  if variable?
    variant_class.new(self, ActiveStorage::Variation.wrap(transformations).default_to(default_variant_transformations))
  else
    raise ActiveStorage::InvariableError
  end
end

Возвращает экземпляр ActiveStorage::Variant или ActiveStorage::VariantWithRecord с набором transformations. Это актуально только для файлов изображений, и оно позволяет преобразовывать любые изображения для размера, цветов и т. п. Пример:

avatar.variant(resize_to_limit: [100, 100]).processed.url

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

Однако часто вы не хотите сразу же преобразовывать вариант. А просто ссылаетесь на определённый вариант, который может быть создан контроллером по требованию. Например:

<%= image_tag Current.user.avatar.variant(resize_to_limit: [100, 100]) %>

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

Вызывает исключение ActiveStorage::InvariableError, если процессор вариантов не может преобразовать объект blob. Чтобы определить, является ли объект blob переменным, вызовите ActiveStorage::Blob#variable?.

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

Spec-Zone.ru

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