3

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

3 回答 3

6

使用回形针插值:

文件 config/initializers/paperclip.rb:

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

has_ attach_file 选项:

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

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

于 2009-08-12T12:36:43.527 回答
0

每次我看到随机这个词并且它与字符串有关时,我都会想到 GUID。也许他们可以为你工作。

于 2009-07-18T06:14:32.603 回答
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"

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

$ gem env

然后,它会在“-GEM PATHS:”中向您显示一条路径,在我的情况下,这是路径:

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

在这个方向你可以找到 "paperclip.rb" 。

于 2017-05-21T10:15:42.063 回答