Spec-Zone.ru › Ruby on Rails 6.0

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

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

preview(transformations) Показать исходный код
# File activestorage/app/models/active_storage/blob/representable.rb, line 56
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.service_url

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

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

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

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

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

representation(transformations) Показать исходный код
# File activestorage/app/models/active_storage/blob/representable.rb, line 78
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.service_url

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

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

variable?() Показать исходный код
# File activestorage/app/models/active_storage/blob/representable.rb, line 37
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 28
def variant(transformations)
  if variable?
    ActiveStorage::Variant.new(self, transformations)
  else
    raise ActiveStorage::InvariableError
  end
end

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

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

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

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

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

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

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

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

Spec-Zone.ru

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