Spec-Zone.ru › Ruby on Rails 7.0

модуль 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