更改CarrierWave文件上传位置

时间:2014-12-24 11:04:38

标签: ruby-on-rails file-upload carrierwave

我想更改使用CarrierWave gem时保存文件的默认位置。目前,文件存储在public/uploads/userfile/avatar/MODELID中。我想根据签名用户更改位置。

例如用户1已登录,文件应存储到, public/uploads/USERID/MODELID

我将avatar_uploader.rb更改为:

def store_dir
  "uploads/#{current_user.id}/#{model.id}"
end

我收到错误消息,说找不到current_user。任何帮助/澄清将不胜感激。

2 个答案:

答案 0 :(得分:0)

上传者(以及模型)不知道设计制作的current_user变量,只适用于控制器和视图。

我要解决的方法是清空你的store_dir方法:

def store_dir
    ""
end

然后转到您的控制器并将您的首选键分配给"键"上传器对象的属性:

@uploader = @model.uploader_mounted_as
@uploader.key = "uploads\/#{current_user.id}\/#{model.id}/\${filename}"

如果文件为"uploads/1/2/image.png",则您的上传内容会存储到image.png,您的current_user标识为1,模型实例的标识为2

答案 1 :(得分:0)

所以我在发布问题后解决了这个问题。光辉的光芒总是在错误的时间出现!

在这里,

def store_dir
  "uploads/#{model.user_id}"
end