使用Polymorphic Paperclip生成唯一的文件路径

时间:2009-07-18 06:10:47

标签: ruby-on-rails paperclip polymorphism

我遇到了一个问题,不同用户上传的文件名称被Polymorphic Paperclip插件覆盖。我想做的是将当前用户的ID注入URL /路径。这可能吗?生成随机名称会更好吗?

以下是我当前的:asset.rb中的url和:path参数值:

:url => "/assets/:id/:style/:basename.:extension",
:path => ":rails_root/public/assets/:id/:style/:basename.:extension"

我希望能够做到的是:

:url => "/assets/#{current_users_id}/:id/:style/:basename.:extension",
:path => ":rails_root/public/assets/#{current_users_id}/:id/:style/:basename.:extension"

3 个答案:

答案 0 :(得分:6)

使用Paperclip插值:

file config / initializers / paperclip.rb:

module Paperclip
  module Interpolations
    def user_id(attachment, style)
      current_user.id
    end
  end
end

has_ attached_file选项:

:url => "/assets/:user_id/:id/:style/:filename"

(语法从Paperclip 2.x更改为2.3;:路径不是必需的;使用最新版本并查看源代码,它已有详细记录。)

答案 1 :(得分:0)

每当我看到单词random并且它与字符串有关时,我认为是GUID。也许他们可以为你工作。

答案 2 :(得分:0)

对我而言,它不能通过paperclip.rb工作,但它的工作原理如下:

在模型类中:

class Micropost < ApplicationRecord
  Paperclip.interpolates :user_id do |attachment, style|
    attachment.instance.user_id
  end

 has_attached_file  :pic1, 
    :url => "/Microposts/:user_id/:style/:basename.:extension"

如果你想通过Paperclip插值来做,你应该找到这样的路径: 首先找到gem文件路径。在您的终端输入:

$ gem env

然后,它会在&#34; - GEM路径中显示一条路径:&#34; 就我而言,这就是道路:

:/usr/local/lib/ruby/gems/2.4.0/gems/paperclip-5.0.0/lib/paperclip

在这个方向你可以找到&#34; paperclip.rb&#34; 。