我开始使用carrierwave进行文件上传,到目前为止对它非常满意。我的文件存储在amazon s3上,这非常简单,而且工作可靠。
现在我有一个名为pictures
的模型和一个上传者名称MainUploader
。我需要一个特殊的动态路径来保存这些文件到上传时。
我也在使用设计,我有current_user
我可以从我的视图和控制器访问,但不能从载波上传器访问。我需要文件的路径类似
uploads/#{current_user.location}/#{current_user.first_name}/images
但我无法从上传者访问current_user,也没有看到任何替代方案。这种类型的动态路径是否可以使用carrierwave(不重写大量的这个宝石)?
非常感谢任何指针。 谢谢你的帮助。
答案 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。