我已经将我的Rails应用程序迁移到5.2.0。在我使用回形针之前。回形针会在上传图像时生成不同的变体,例如缩略图和头像。如何使用 ActiveStorage 实现这一点?我知道我们可以user.avatar.variant(resize_to_fit: [100, 100])
做到这一点,但对我来说,这就像一遍又一遍地这样做。我的目标是在上传这些变体后对其进行预处理。
如果从您的经验来看这很糟糕,你们也可以建议更好的技术。
使用.processed
是检查该变体是否已处理并上传到存储服务的正确方法。
回形针做得很好的一件事是styles: {}
对象,您可以在其中列出要对缩略图等执行的所有不同转换,并命名它们。
以下是我处理命名和存储转换的方式。这也使我的模板语法更短:
class Image < ActiveRecord::Base
has_one_attached :image_file
def self.sizes
{
thumbnail: { resize: "100x100" },
hero1: { resize: "1000x500" }
}
end
def sized(size)
self.image_file.variant(Image.sizes[size]).processed
end
end
然后在模板中,假设我有@image
,我可以简单地调用@image.sized(:hero1)
@aguardientico是正确的,方法是将.processed
方法添加到您的变体对象,该方法将使用 blob 键检查文件是否已存在于您的服务中,然后再尝试再次重现整个过程。
此外,还需要了解的是,resize_to_fit
是一种图像处理宝石转换方法,Rails 5.2 尚不支持该方法。相反,现在它使用MiniMagick,您可以将>
附加到回形针的resize
方法中。
所以重写它看起来像user.avatar.variant(resize: "100x100>")