我想使用回形针插件,我在文档中看到了更改存储路径的方法。
由于我的模型(以及同一级别的目录)将拥有数千个项目,因此我想知道如何格式化我的 :id (并将其分解)以执行某些操作,例如,如果 id 为 32768,例如:
:path => ":rails_root/public/system/:class/:attachment/3/2/7/6/8/:style/:basename.:extension"
爆炸 :id 并将新路径发送到回形针的最佳方法是什么?
我想使用回形针插件,我在文档中看到了更改存储路径的方法。
由于我的模型(以及同一级别的目录)将拥有数千个项目,因此我想知道如何格式化我的 :id (并将其分解)以执行某些操作,例如,如果 id 为 32768,例如:
:path => ":rails_root/public/system/:class/:attachment/3/2/7/6/8/:style/:basename.:extension"
爆炸 :id 并将新路径发送到回形针的最佳方法是什么?
您想使用Paperclip::Interpolations。您可以创建使用分解 id 的自定义插值。首先,您需要在路径中使用自定义插值:
:path => ":rails_root/public/system/:class/:attachment/:exploded_id/:style/:filename"
然后像这样向模型添加一个定义:
Paperclip.interpolates :exploded_id do |attachment, style|
attachment.instance.exploded_id
end
以及爆炸 id 的方法:
def exploded_id
self.id.to_s.scan(/./).join('/')
end
Paperclip 提供了一种处理文件夹结构的内置方法:
:path => ":rails_root/public/system/:class/:attachment/:id_partition/:style/:basename.:extension"
这将给出目录结构
.../:attachment/000/032/768/:style/...
这不使用您请求的文件夹格式,但可能更有效。
奖金
如果您要从现有文件夹结构转换到这个 id 分区结构,请检查并查看这个Ruby 脚本,它会为您移动文件夹。以防万一,请在运行之前对服务器上的虚拟文件夹进行一些测试。