خطأ UploadReference في العديد من المستوردين

في الأسبوع الماضي، اتصل بنا أحد العملاء مشيرًا إلى أنه بعد أسبوع من عملية ترحيل أجريناها لهم، كانت الصورة الأخيرة فقط من كل منشور لا تزال معروضة. تعمقنا في هذا الأمر ووجدنا مشكلة.

في العام الماضي، تم تغيير PostUpload إلى UploadReference وفي الالتزام https://github.com/discourse/discourse/commit/8a5d97ef3f6f2d29a4e58b325f15b325c7d62986#diff-07ef93e0c499f6a6d5ce34607cb06a82ca03785d099391db9ea44bff30279727 تم تغيير العديد من المستوردين لاستخدام UploadReference بدلاً من PostUpload.

النمط الموجود في معظم المستوردين هو

def import_attachments
   # ... الحصول على التحميلات ومنشوراتها
   uploads.each do |upl|
     # ... تحميل الملف
     # ... البحث عن المنشور المقابل
     UploadReference.ensure_exist!(upload_ids: [upload.id], target: post)
   end
end

وهو ما يبدو لطيفًا وجيدًا.

ومع ذلك، فإن UploadReference.ensure_exist! يتأكد أيضًا من عدم وجود أي مراجع تحميل أخرى لهذا المنشور.

وبالتالي، فإن استخدام UploadReference.ensure_exist! عدة مرات على منشور واحد سيحتفظ فقط بآخر مرجع تحميل.

بالنظر إلى اسم الدالة، سيكون من الأفضل على الأرجح تغيير التنفيذ الفعلي (إزالة delete_all) بدلاً من إعادة كتابة منطق الاستدعاء في كل هذه الأماكن؟

@david @nbianca

3 إعجابات