ポリモーフィックペーパークリップを持つユニークなファイルパスを生成します

StackOverflow https://stackoverflow.com/questions/1146848

質問

私は別のユーザーが多型ペーパークリッププラグインで上書きされている同じ名前のファイルをアップロードすると問題に実行していますよ。私は何をしたいのは、URL /パスに現在のユーザーのIDを注入しています。これは可能ですか?私はランダムな名前を生成したほうが良いでしょうか?

URLと::asset.rbのパスパラメータ値:

ここでは私の現在のです。

: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"
役に立ちましたか?

解決

を使用するペーパークリップ補間ます:

ファイルの設定/初期化子/ 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から変更;:。パスは必要ありません。使用最新バージョンとソースを見て、それは非常によく文書化されています)。

他のヒント

私は言葉にランダムに表示し、それが文字列に関係するたびに、私は、GUIDを考えます。おそらく、彼らはあなたのために働く可能性があります。

私のためにそれdidntの仕事bypaperclip.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 env

すると、それはあなたの中にパスが表示されます「 - GEMパスを:」 私の場合、これはパスします:

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

この方向では、「paperclip.rb」を見つけることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top