модуль ActiveStorage::Blob::Representable
Публичные методы экземпляров
# 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. Предварительный просмотр — это изображение, сгенерированное из файла, который не является изображением. Active Storage поставляется со встроенными просмотриками для видео и PDF-документов. Просмотрщик видео извлекает первый кадр из видео, а просмотрщик PDF извлекает первую страницу из PDF-документа.
blob.preview(resize: "100x100").processed.service_url
Избегайте обработки предварительных просмотров синхронно в представлениях. Вместо этого используйте ссылку на действие контроллера, которое обрабатывает их по требованию. Active Storage предоставляет один, но вы можете создать свой собственный (например, если вам нужна аутентификация). Вот как использовать встроенную версию:
<%= image_tag video.preview(resize: "100x100") %>
Этот метод вызывает ActiveStorage::UnpreviewableError, если ни один просмотрщик не поддерживает получаемый файл. Чтобы определить, поддерживает ли какой-либо просмотрщик файл, вызовите #previewable?.
# File activestorage/app/models/active_storage/blob/representable.rb, line 65
def previewable?
ActiveStorage.previewers.any? { |klass| klass.accept?(self) }
end Возвращает true, если какой-либо зарегистрированный просмотрщик поддерживает файл. По умолчанию это будет true для видео и PDF-документов.
# File activestorage/app/models/active_storage/blob/representable.rb, line 90 def representable? variable? || previewable? end
Возвращает true, если файл является переменным или поддерживает предварительный просмотр.
# 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 для файла, поддерживающего предварительный просмотр, или ActiveStorage::Variant для переменного файла изображения.
blob.representation(resize: "100x100").processed.service_url
Вызывает ActiveStorage::UnrepresentableError, если получаемый файл не является ни переменным, ни поддерживающим предварительный просмотр. Используйте #representable? для определения, поддерживает ли файл представление.
См. #preview и #variant для получения дополнительной информации.
# File activestorage/app/models/active_storage/blob/representable.rb, line 37 def variable? ActiveStorage.variable_content_types.include?(content_type) end
Возвращает true, если ImageMagick может преобразовать файл (его тип содержимого находится в ActiveStorage.variable_content_types).
# 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: "100x100").processed.service_url
Это создаст и обработает вариант файла аватара, ограниченный высотой и шириной 100 пикселей. Затем он загрузит этот вариант в службу в соответствии с ключом производного файла и преобразованиями.
Однако часто вы не хотите преобразовывать вариант сразу. А скорее просто ссылаетесь на определенный вариант, который может быть создан контроллером по запросу. Так:
<%= image_tag Current.user.avatar.variant(resize: "100x100") %>
Это создаст URL для этого конкретного файла с этим конкретным вариантом, который ActiveStorage::RepresentationsController затем сможет создать по запросу.
Вызывает ActiveStorage::InvariableError, если ImageMagick не может преобразовать файл. Чтобы определить, является ли файл переменным, вызовите #variable?.
© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.