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