Carrierwave:根据created_at日期将文件存储在目录中

时间:2012-12-12 11:16:05

标签: ruby-on-rails carrierwave

我正在使用carrierwave来处理我的上传内容。我已按照以下方式指定 store_dir

def store_dir
  "uploads/#{Time.now.year}/#{Time.now.month}/#{Time.now.day}"
end

上传文件就像一个魅力 - 每次我上传一个文件,它最终会在目录结束;即“今天的目录”。

当我尝试下载文件时,carrierwave正在根据 store_dir 选项动态构建下载路径。因此,假设在fliesystem上的以下路径中提供了在1.12.2012上载的文件:

/uploads/2012/12/01/file.ext

将由carrierwave检索为:

/uploads/2012/12/12/file.ext

这显然会导致“无法读取文件”错误。

我带来了两种不同的解决方案:

  1. 创建一个单独的文件夹,我将在创建文件时将实际文件路径存储到文件中,然后使用此值来检索文件。
  2. 重载 retrieve_from_store!方法(属于carrierwave gem的一部分),并根据文件记录中的 created_at 字段构建路径,而不是 store_dir < /强>
  3. 我倾向于第二种可能性,因为感觉不那么脏。然而,两者都感觉“不是铁路”。哪一个会更好用,为什么?或者也许carrierwave提供了解决这个问题的方法?

1 个答案:

答案 0 :(得分:4)

在这里完全猜测,但通过查看文档,我认为这样的事情应该有效:

def store_dir
    "uploads/#{model.created_at.year}/#{model.created_at.month}/#{model.created_at.day}"
end