【问题标题】:Is it possible to have a dynamic storage path with carrierwave?是否可以使用载波进行动态存储路径?
【发布时间】:2011-12-12 06:48:33
【问题描述】:

我从carrierwave 开始上传文件,到目前为止我对此非常满意。我的文件存储在 amazon s3 上,这相当简单,而且运行可靠。

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

我也在使用 devise,我有 current_user 我可以从我的视图和控制器访问,但不能从载波上传器访问。我需要文件的路径类似于

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

但我无法从上传程序访问 current_user,也没有看到任何替代方案。这种类型的动态路径是否可以使用载波(无需重写大量此 gem)?

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

【问题讨论】:

    标签: ruby-on-rails-3.1 devise carrierwave


    【解决方案1】:

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

    我最终做的是在我的模型 (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。

    【讨论】:

      猜你喜欢
      • 2017-09-01
      • 2011-02-17
      • 2018-07-19
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多