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

Yur*_*uri 3 devise carrierwave ruby-on-rails-3.1

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

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

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

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

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

任何指针都非常感谢.谢谢您的帮助.

Yur*_*uri 5

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

我最终做的是在我的model(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
Run Code Online (Sandbox Code Playgroud)

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