2009-07-18 6 views
3

Polymorphic Paperclipプラグインで同じ名前のファイルを上書きしている別のユーザーがアップロードした問題が発生しています。私がしたいのは、現在のユーザーのIDをURL /パスに注入することです。これは可能ですか?私はランダムな名前を生成する方が良いでしょうか? URLと::ここ Polymorphic Paperclipで一意のファイルパスを生成する

は私の現在のあるasset.rbのパスパラメータ値:

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

答えて

6

使用ペーパークリップ補間:

ファイルのconfig /初期化子/ 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" 

(構文は2.3にペーパークリップ2.xから変更;:パスは必要ではありません;最新バージョンを使用し、ソースを見てください、それはかなりよく文書化されています)

+1

deviseを使用している場合は、モデルからユーザーのテーブル(user_idなど)に参照がある場合は、current_userを使用できません。そのようなst.http://www.adance.user_id –

+0

これの例? ^ – Splendonia

0

たびI:私は行うことができるようにしたいのですがどのような

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

がこれですランダムな単語を参照してください、それは文字列に関連して、私はGUIDだと思います。おそらく彼らはあなたのために働くことができます。

0

は私のためにそれが仕事bypaperclip.rbをdidntのが、それはこのように動作します:あなたはペーパークリップ補間によってそれをしたい場合は、このようなパスを見つける必要があります場合は

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パスを:」私の場合は が、これはパスだった:あなたは見つけることができます。この方向で

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

"paperclip.rb"

関連する問題