我正在使用carrierwave 来处理我的上传。我已经通过以下方式指定了store_dir:
def store_dir
"uploads/#{Time.now.year}/#{Time.now.month}/#{Time.now.day}"
end
上传文件就像一个魅力 - 每次我上传一个文件时,它都会在它应该结束的目录中结束;即“今天的目录”。
当我尝试下载文件时,carrierwave 正在根据store_dir选项动态构建下载路径。因此,假设在 1.12.2012 上传的文件可在 fliesystem 的以下路径中找到:
/uploads/2012/12/01/file.ext
将被carrierwave检索为:
/uploads/2012/12/12/file.ext
这显然会导致“无法读取文件”错误。
我提供了 2 种不同的可能解决方案:
- 创建一个单独的文件,我将在创建文件时存储文件的实际文件路径,然后使用该值来检索文件。
- 重载retrieve_from_store!方法(它是carrierwave gem的一部分)并使其基于文件记录中的created_at字段而不是store_dir构造路径。
我倾向于第二种可能性,因为它感觉不那么脏。然而,两者都觉得“不走寻常路”。哪个更好用,为什么?或者也许carrierwave提供了解决这个问题的方法?