轨道 3 - 回形针 - 大量目录的存储选项



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

由于我的模型(以及同一级别的目录)将有数千个项目,因此我想知道如何格式化我的 :id(并分解它)以执行某些操作,例如 id 为 32768,例如:

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

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

你想使用回形针::插值。您可以创建使用分解 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

回形针提供了一种处理文件夹结构的内置方法:

:path => ":rails_root/public/system/:class/:attachment/:id_partition/:style/:basename.:extension"

这将给出目录结构

.../:attachment/000/032/768/:style/...

这不使用您请求的文件夹格式,但可能更有效。

奖金

如果要从现有文件夹结构转换为此 id 分区结构,请检查并查看此 Ruby 脚本,该脚本会为您移动文件夹。以防万一,请在运行之前对服务器上的虚拟文件夹进行一些测试。

最新更新