Generando una ruta de archivo única con Polymorphic Paperclip
-
16-09-2019 - |
Pregunta
Tengo un problema con diferentes usuarios que cargan archivos con el mismo nombre y se sobrescriben con el complemento Polymorphic Paperclip.Lo que me gustaría hacer es inyectar la identificación del usuario actual en la URL/ruta.es posible?¿Sería mejor generar un nombre aleatorio?
Aquí están mis valores actuales de los parámetros :url y :path en active.rb:
:url => "/assets/:id/:style/:basename.:extension",
:path => ":rails_root/public/assets/:id/:style/:basename.:extension"
Lo que me gustaría poder hacer es esto:
:url => "/assets/#{current_users_id}/:id/:style/:basename.:extension",
:path => ":rails_root/public/assets/#{current_users_id}/:id/:style/:basename.:extension"
Solución
Utilice interpolaciones de clips:
archivo de configuración/inicializadores/paperclip.rb:
module Paperclip
module Interpolations
def user_id(attachment, style)
current_user.id
end
end
end
tiene_opción_archivo_adjunto:
:url => "/assets/:user_id/:id/:style/:filename"
(La sintaxis cambió de Paperclip 2.x a 2.3;:ruta no es necesaria;Utilice la última versión y eche un vistazo a la fuente, está bastante bien documentada).
Otros consejos
Cada vez que veo la palabra al azar y se relaciona con cuerdas, creo GUID. Tal vez se podría trabajar para usted.
para mí que aún no ha bypaperclip.rb trabajo pero funciona de esta manera:
En la clase de modelo:
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"
En caso si usted quiere hacerlo por interpolaciones Paperclip que debe encontrar un camino como éste: en primer lugar encontrar la ruta del archivo joya. escriba esto en su terminal:
$ gem env
A continuación, se le mostrará un camino en "- CAMINOS GEM:" en mi caso se trataba de la ruta:
:/usr/local/lib/ruby/gems/2.4.0/gems/paperclip-5.0.0/lib/paperclip
En esta dirección se puede encontrar "paperclip.rb".