Rails 3 - PaperClip - 许多目录的存储选项

时间:2012-04-25 21:09:09

标签: ruby-on-rails paperclip storage

我想使用paperclip插件,我在文档中看到了更改存储路径的方法。

因为我将为我的模型(和同一级别的目录)有数千个项目,我想知道如何格式化我的:id(和爆炸它)来做某事,如果id是32768,例如, :

:path => ":rails_root/public/system/:class/:attachment/3/2/7/6/8/:style/:basename.:extension"

爆炸:id并将新路径发送到回形针的最佳方法是什么?

2 个答案:

答案 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,它会为您移动文件夹。为了以防万一,请在运行之前使用服务器上的虚拟文件夹进行一些测试。