【问题标题】:Changing CarrierWave file upload location更改 CarrierWave 文件上传位置
【发布时间】:2014-12-25 14:32:53
【问题描述】:

我想更改使用 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。任何帮助/澄清将不胜感激。

【问题讨论】:

  • 您将“mount_uploader”放在什么模型上,该模型与用户有何关系?

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


【解决方案1】:

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

我解决这个问题的方法是清空你的 store_dir 方法:

def store_dir
    ""
end

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

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

如果文件是image.png,这会将您的上传存储到"uploads/1/2/image.png",您的current_user 的id 为1,模型实例的id 为2

【讨论】:

    【解决方案2】:

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

    来了,

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-28
      • 2014-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-01
      • 1970-01-01
      相关资源
      最近更新 更多