实例公共方法
preview(transformations) 链接
返回一个 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]) %>
如果没有任何预览器接受接收的 Blob,此方法将引发 ActiveStorage::UnpreviewableError
。若要确定 Blob 是否被任何预览器接受,请调用 ActiveStorage::Blob#previewable?
。
源代码: 显示 | 在 GitHub 上
# 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, "No previewer found for blob with ID=#{id} and content_type=#{content_type}" end end
previewable?() 链接
如果任何已注册的预览器接受 Blob,则返回 true。默认情况下,这将针对视频和 PDF 文档返回 true。
源代码: 显示 | 在 GitHub 上
# File activestorage/app/models/active_storage/blob/representable.rb, line 72 def previewable? ActiveStorage.previewers.any? { |klass| klass.accept?(self) } end
representable?() 链接
如果 Blob 是变量或可预览的,则返回 true。
源代码: 显示 | 在 GitHub 上
# File activestorage/app/models/active_storage/blob/representable.rb, line 97 def representable? variable? || previewable? end
representation(transformations) 链接
对于可预览的 Blob 返回一个 ActiveStorage::Preview
,对于可变图像 Blob 返回一个 ActiveStorage::Variant
。
blob.representation(resize_to_limit: [100, 100]).processed.url
如果接收的 Blob 既不是变量也不是可预览的,则引发 ActiveStorage::UnrepresentableError
。调用 ActiveStorage::Blob#representable?
以确定 Blob 是否可表示。
有关更多信息,请参阅 ActiveStorage::Blob#preview
和 ActiveStorage::Blob#variant
。
源代码: 显示 | 在 GitHub 上
# 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, "No previewer found and can't transform blob with ID=#{id} and content_type=#{content_type}" end end
variable?() 链接
如果变体处理器可以转换 Blob(其内容类型在 ActiveStorage.variable_content_types
中),则返回 true。
源代码: 显示 | 在 GitHub 上
# File activestorage/app/models/active_storage/blob/representable.rb, line 44 def variable? ActiveStorage.variable_content_types.include?(content_type) end
variant(transformations) 链接
返回一个 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]) %>
这将为具有该特定变体的该特定 Blob 创建一个 URL,然后 ActiveStorage::RepresentationsController 可以按需生成该 URL。
如果变体处理器无法转换 Blob,则引发 ActiveStorage::InvariableError
。若要确定 Blob 是否是变量,请调用 ActiveStorage::Blob#variable?
。
源代码: 显示 | 在 GitHub 上
# 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, "Can't transform blob with ID=#{id} and content_type=#{content_type}" end end