是否可以使用carrierwave建立动态存储路径?

时间:2011-12-12 06:48:33

标签: ruby-on-rails-3.1 devise carrierwave

我开始使用carrierwave进行文件上传,到目前为止对它非常满意。我的文件存储在amazon s3上,这非常简单,而且工作可靠。

现在我有一个名为pictures的模型和一个上传者名称MainUploader。我需要一个特殊的动态路径来保存这些文件到上传时。

我也在使用设计,我有current_user我可以从我的视图和控制器访问,但不能从载波上传器访问。我需要文件的路径类似

uploads/#{current_user.location}/#{current_user.first_name}/images

但我无法从上传者访问current_user,也没有看到任何替代方案。这种类型的动态路径是否可以使用carrierwave(不重写大量的这个宝石)?

非常感谢任何指针。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:5)

以防万一其他人从谷歌搜索或其他东西想知道这里。

我最终做的是在我的模型(pictures)上为User模型创建belongs_to关系。然后从载波上传器我可以做model.user.first_name,相当于picture.user.first_name。所以我可以将model.user放在我的路径中,并以这种方式访问​​任何用户属性。希望这有助于其他人。

类似的东西:

def store_dir
    "#{model.user.first_name}/uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.title}"
end

PS 注意我也使用model.title,因为我希望picture.title也在路径中。虽然不是最好的做法。如果这样做,请确保在生产中解析model.title,以便它为您提供有效的文件夹名称/ URL。