Error de referencia de carga en muchos importadores

La semana pasada, un cliente se puso en contacto con nosotros indicando que una semana después de una migración que realizamos para ellos, solo se mostraba la última imagen de cada publicación. Investigamos y encontramos un problema.

El año pasado, PostUpload se cambió a UploadReference y en el commit https://github.com/discourse/discourse/commit/8a5d97ef3f6f2d29a4e58b325f15b325c7d62986#diff-07ef93e0c499f6a6d5ce34607cb06a82ca03785d099391db9ea44bff30279727 se modificaron muchos importadores para usar UploadReference en lugar de PostUpload.

El patrón encontrado en la mayoría de los importadores es

def import_attachments
   # ... obtener cargas y sus publicaciones
   uploads.each do |upl|
     # ... cargar archivo
     # ... encontrar publicación correspondiente
     UploadReference.ensure_exist!(upload_ids: [upload.id], target: post)
   end
end

lo cual parece bueno y correcto.

Sin embargo, UploadReference.ensure_exist! también se asegura de que no existan otras referencias de carga para esa publicación.

Por lo tanto, usar UploadReference.ensure_exist! varias veces en una sola publicación solo conservará la última referencia de carga.

Dado el nombre de la función, ¿probablemente sería mejor cambiar la implementación real (eliminando el delete_all) en lugar de reescribir la lógica de llamada en todos estos lugares?

@david @nbianca

3 Me gusta