Génération d'un fichier unique chemin avec Polymorphes Trombone
-
16-09-2019 - |
Question
Je suis en cours d'exécution dans un problème avec les différents utilisateurs de télécharger des fichiers avec le même nom peuvent être écrasées avec le Polymorphe de forme de Trombone plugin.Ce que je voudrais faire est d'injecter le courant ID de l'utilisateur dans l'URL/chemin d'accès.Est-ce possible?Serais-je mieux de générer un nom aléatoire?
Voici ma situation actuelle :l'url et le chemin des valeurs de paramètre de l'actif.rb:
:url => "/assets/:id/:style/:basename.:extension",
:path => ":rails_root/public/assets/:id/:style/:basename.:extension"
Ce que j'aimerais être capable de faire est ceci:
:url => "/assets/#{current_users_id}/:id/:style/:basename.:extension",
:path => ":rails_root/public/assets/#{current_users_id}/:id/:style/:basename.:extension"
La solution
Utilisez un Trombone, des interpolations:
fichier config/initializers/trombone.rb:
module Paperclip
module Interpolations
def user_id(attachment, style)
current_user.id
end
end
end
has_ attached_file option:
:url => "/assets/:user_id/:id/:style/:filename"
(La syntaxe a changé à partir d'un Trombone, 2.x 2.3;:chemin d'accès n'est pas nécessaire;L'utilisation de la dernière version et ont un look à la source, c'est assez bien documenté.)
Autres conseils
Chaque fois que je vois le mot hasard et elle se rapporte à des chaînes, je pense que GUID. Peut-être qu'ils pourraient travailler pour vous.
pour moi ce bypaperclip.rb de travail na pas, mais cela fonctionne comme ceci:
Dans la classe modèle:
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"
Dans le cas si vous voulez le faire par interpolations Paperclip vous devriez trouver un chemin comme celui-ci: d'abord trouver le chemin du fichier de pierres précieuses. entrez dans votre terminal:
$ gem env
Ensuite, il vous montrera un chemin dans « - GEM CHEMINS: » ce fut dans mon cas le chemin:
:/usr/local/lib/ruby/gems/2.4.0/gems/paperclip-5.0.0/lib/paperclip
Dans ce sens, vous pouvez trouver « paperclip.rb ».