根据Carrier wave Direct的记录值上传路径

Dha*_*ana 2 gem file-upload ruby-on-rails amazon-s3 carrierwave

我想配置Carrier wave Direct的上传路径,我用它来直接将文件上传到亚马逊s3.在app/uploaders/myuploader.rb中,我有,

def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
Run Code Online (Sandbox Code Playgroud)

我想修改它,以便路径看起来像
"uploads /#{model.class.to_s.underscore} /#{mounted_as} /#{User.name}".
所以它会像
"uploads/Users/avatar/michael_jordan/..",
其中User是安装上传器的模型.

我在github(https://github.com/dwilkie/carrierwave_direct)中查看了Carrier wave Gem的源代码,我无法弄清楚如何将值从活动模型对象传递给上传器来创建上传路径(亚马逊s3的关键).有没有办法做到这一点?

谢谢!

Dha*_*ana 5

好吧.一个月之后我被迫处理同样的问题,这次我把它钉在了一边.在这里提出我的解决方案以便它可以帮助其他人遇到同样的问题,1)覆盖store_dir,使其返回一个空字符串,

def store_dir
 ""
end
Run Code Online (Sandbox Code Playgroud)

2)到你的控制器并将你喜欢的键分配给你的上传器对象的"key"属性,比如

  @uploader = @player.avatar 
  @uploader.key =@player.name +"/\${filename}"
  #say if player name in is jordan and the filename is jordan.jpg.
  #the uplaod path  now will be   
  #http://bucketname/jordan/jordan.jpg.
Run Code Online (Sandbox Code Playgroud)

这里播放器是模型对象,avatar是安装上传器的属性,键将被设置为播放器名称/文件名.

这就是我要找的:)