Ruby on rails 使用多态回形针生成唯一的文件路径

Ruby on rails 使用多态回形针生成唯一的文件路径,ruby-on-rails,paperclip,polymorphism,Ruby On Rails,Paperclip,Polymorphism,我遇到了一个问题,不同的用户上传的同名文件被多态回形针插件覆盖。我想做的是将当前用户的ID注入URL/路径。这可能吗?生成一个随机名称会更好吗 以下是我在asset.rb中的当前:url和:path参数值: :url => "/assets/:id/:style/:basename.:extension", :path => ":rails_root/public/assets/:id/:style/:basename.:extension" 我希望能够做到的是: :url =&g

我遇到了一个问题,不同的用户上传的同名文件被多态回形针插件覆盖。我想做的是将当前用户的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"

每次我看到单词random和字符串相关时,我都会想GUID。也许它们可以为您工作。

使用回形针插值:

文件config/initializers/paperclip.rb:

module Paperclip
  module Interpolations
    def user_id(attachment, style)
      current_user.id
    end
  end
end
已附加文件选项:

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

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

对于我来说,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"
然后,它将在“-GEM path:”中显示一条路径: 就我而言,这就是路径:

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

在这个方向上你可以找到“回形针.rb”

如果您使用的是Deviate,则不能使用current_user,相反,如果您的model to user表中有一个引用(比如user_id),则可以执行类似附件的操作。instance.user_id您可以发布一个示例吗^
:/usr/local/lib/ruby/gems/2.4.0/gems/paperclip-5.0.0/lib/paperclip