модуль ActiveStorage::Blob::Representable
Открытые методы экземпляра
# 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?.
# 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-документов.
# File activestorage/app/models/active_storage/blob/representable.rb, line 97 def representable? variable? || previewable? end
Возвращает true, если объект blob является переменным или допускает предварительный просмотр.
# 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 для получения дополнительной информации.
# 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).
# 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.