Spec-Zone.ru › Ruby on Rails 8.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, "No previewer found for blob with ID=#{id} and content_type=#{content_type}"
  end
end

Возвращает экземпляр ActiveStorage::Preview с заданным набором transformations. Предварительный просмотр — это изображение, сгенерированное из файла без изображения. 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, "No previewer found and can't transform blob with ID=#{id} and content_type=#{content_type}"
  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, "Can't transform blob with ID=#{id} and content_type=#{content_type}"
  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