Na semana passada, um cliente entrou em contato conosco afirmando que, uma semana após uma migração que fizemos para eles, apenas a última imagem de cada postagem ainda estava sendo exibida. Investigamos isso e encontramos um problema.
No ano passado, PostUpload foi alterado para UploadReference e no commit https://github.com/discourse/discourse/commit/8a5d97ef3f6f2d29a4e58b325f15b325c7d62986#diff-07ef93e0c499f6a6d5ce34607cb06a82ca03785d099391db9ea44bff30279727, muitos importadores foram alterados para usar UploadReference em vez de PostUpload.
O padrão encontrado na maioria dos importadores é
def import_attachments
# ... obter uploads e suas postagens
uploads.each do |upl|
# ... fazer upload do arquivo
# ... encontrar a postagem correspondente
UploadReference.ensure_exist!(upload_ids: [upload.id], target: post)
end
end
o que parece bom e correto.
No entanto, UploadReference.ensure_exist! também garante que nenhuma outra referência de upload exista para essa postagem.
Portanto, usar UploadReference.ensure_exist! várias vezes em uma única postagem reterá apenas a última referência de upload.
Dado o nome da função, provavelmente seria melhor alterar a implementação real (removendo o delete_all) em vez de reescrever a lógica de chamada em todos esses lugares?