我想使用paperclip插件,我在文档中看到了更改存储路径的方法。
因为我将为我的模型(和同一级别的目录)有数千个项目,我想知道如何格式化我的:id(和爆炸它)来做某事,如果id是32768,例如, :
:path => ":rails_root/public/system/:class/:attachment/3/2/7/6/8/:style/:basename.:extension"
爆炸:id并将新路径发送到回形针的最佳方法是什么?
答案 0 :(得分:2)
您想使用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
答案 1 :(得分:1)
Paperclip提供了一种处理文件夹结构的内置方法:
:path => ":rails_root/public/system/:class/:attachment/:id_partition/:style/:basename.:extension"
这将提供目录结构
.../:attachment/000/032/768/:style/...
这不使用您请求的文件夹格式,但可能效率更高。
<强>加成强>
如果要从现有文件夹结构转换为此ID分区结构,请检查并查看此Ruby script,它会为您移动文件夹。为了以防万一,请在运行之前使用服务器上的虚拟文件夹进行一些测试。