Spec-Zone.ru › Ruby on Rails 6.1

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

Методы экземпляра публичного интерфейса

preview(transformations) Показать исходный код
# File activestorage/app/models/active_storage/blob/representable.rb, line 61
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 70
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 95
def representable?
  variable? || previewable?
end

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

representation(transformations) Показать исходный код
# File activestorage/app/models/active_storage/blob/representable.rb, line 83
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 42
def variable?
  ActiveStorage.variable_content_types.include?(content_type)
end

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

variant(transformations) Показать исходный код
# File activestorage/app/models/active_storage/blob/representable.rb, line 33
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 с заданным набором 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, если ImageMagick не может преобразовать blob. Чтобы определить, является ли blob переменным, вызовите ActiveStorage::Blob#variable?.

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

Spec-Zone.ru

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