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