Pregunta

Me gustaría no duplicar la imagen si es la misma que está publicada,

Me gusta:

  

usuario1 publica una imagen
  usuario2 publica la misma imagen

     

2 # imágenes en la base de datos

¿Hay alguna manera de manejar eso?

Gracias,

¿Fue útil?

Solución

Para lograr esto, necesitaría dividir sus archivos adjuntos en su propio modelo.

Entonces, ¿dónde es probable que ahora tenga

class User < ActiveRecord::Base
   has_attached_file :avatar #plus a bunch of specifications here
end 

Configuraría un nuevo modelo y asociaciones como

class User < ActiveRecord::Base
   belongs_to :images
end 

class Image < ActiveRecord::Base
   has_many :users
   has_attached_file :avatar
end 

Luego, en su controlador, necesitaría hacer

Image.find_or_create_by_avatar_file_name(#filename here)

Entonces, ahora tiene un atributo user.image_id y puede tener una sola imagen cargada asociada con múltiples usuarios.

Sin embargo, he construido varios sistemas bastante grandes con cargas de fotos de usuario (fotos de credenciales, fotos de avatar, fotos divertidas, lo que sea) y la superposición real entre los usuarios tiende a ser bastante pequeña. Además, en realidad solo está ahorrando dinero en lo que es el más barato de sus recursos: el espacio de almacenamiento. No ahorre nada en costos de ancho de banda, procesamiento o complejidad programática siguiendo esta ruta.

A menos que este sea un conjunto de circunstancias realmente único (en cuyo caso sería bueno escuchar lo que está haciendo), le aconsejaría que no siga esta ruta.

Otros consejos

http: / /www.codeproject.com/Messages/2913691/Comparing-one-image-to-many-others-speeded-up.aspx

¡Lo uso en mi programa y todo bien!

Consejos relacionados con DB: almacenar hashes en la tabla. y luego solo necesitas un cálculo de hash.

Acerca de la velocidad

1) Restrinja el tamaño de imagen 100x100, por ejemplo

2) Cuando el usuario intenta iniciar sesión, se calcula el hash de su contraseña. Creo que los usuarios iniciarán sesión con más frecuencia y luego actualizarán sus avatares.

Calcule el hash de cada imagen a medida que se guarda. Cuando un nuevo usuario publique la misma imagen, verifique el hash de esa imagen y vea si coincide con algo en la base de datos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top