Letzte Woche kontaktierte uns ein Kunde, der uns mitteilte, dass eine Woche nach einer von uns durchgeführten Migration nur noch das letzte Bild jedes Beitrags angezeigt wurde. Wir haben uns das genauer angesehen und ein Problem gefunden.
Letztes Jahr wurde PostUpload zu UploadReference geändert und im Commit https://github.com/discourse/discourse/commit/8a5d97ef3f6f2d29a4e58b325f15b325c7d62986#diff-07ef93e0c499f6a6d5ce34607cb06a82ca03785d099391db9ea44bff30279727 wurden viele Importer geändert, um UploadReference anstelle von PostUpload zu verwenden.
Das in den meisten Importern gefundene Muster ist
def import_attachments
# ... uploads und ihre Beiträge abrufen
uploads.each do |upl|
# ... Datei hochladen
# ... entsprechenden Beitrag finden
UploadReference.ensure_exist!(upload_ids: [upload.id], target: post)
end
end
was nett und in Ordnung zu sein scheint.
UploadReference.ensure_exist! stellt jedoch auch sicher, dass keine anderen Upload-Referenzen zu diesem Beitrag existieren.
Daher behält die mehrfache Verwendung von UploadReference.ensure_exist! für einen einzelnen Beitrag nur die letzte Upload-Referenz bei.
Angesichts des Namens der Funktion wäre es wahrscheinlich am besten, die tatsächliche Implementierung zu ändern (das delete_all zu entfernen), anstatt die aufrufende Logik an all diesen Stellen neu zu schreiben?