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