ポリモーフィックペーパークリップを持つユニークなファイルパスを生成します
-
16-09-2019 - |
質問
私は別のユーザーが多型ペーパークリッププラグインで上書きされている同じ名前のファイルをアップロードすると問題に実行していますよ。私は何をしたいのは、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」を見つけることができます。
所属していません StackOverflow