كيفية حذف الهمسات القديمة دفعة واحدة

متابعة للنقاش من العمليات الجماعية الإدارية:

أبحث عن طريقة لحذف الرسائل الخاصة التي تتجاوز عمرًا معينًا من جميع المواضيع.

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

يمكنني حذف المنشورات التي تتجاوز عمرًا معينًا باستخدام post_type=4 (رسالة خاصة)، لكن يبدو أن هذا قد يترك أشياء معلقة أو غير متسقة في قاعدة البيانات، أو قد لا يُسمح به بسبب مفاتيح المنتدى.

هل توجد طريقة آمنة للقيام بذلك؟

إعجابَين (2)

هذه هي أنقى طريقة لحذف المنشورات:

whispers = Post.where(post_type: 4).where("created_at < ?", 1.year.ago)

whispers.find_each do |w|
  PostDestroyer.new(Discourse.system_user, w, skip_staff_log: true).destroy
  putc "."
end

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

هل تعتقد أن هذا سيُلبّي احتياجاتك؟

4 إعجابات

أعتقد أن هذا يبدو مثاليًا - شكرًا لك!

سأجربها على مثيل اختبار، وأرى كم سيستغرق الأمر من الوقت، لأن لدينا على الأرجح بضعة آلاف من الهمسات!!!

إعجابَين (2)

إذن هذه المهمة تعمل بشكل جيد، شكرًا لك… لكن الرسائل الخاصة منكمضة ولا يزال بإمكان المشرفين ومديري النقاشات رؤيتها عند توسيعها.

هذا يُنظم المواضيع، لكنني كنت آمل أن تُحذف تمامًا. تساءلت عما إذا كان يمكن نقل جميع الرسائل الخاصة إلى موضوع جديد، ثم حذفه أو إخفاؤه عن المديريين على الأقل، لكنني وجدت هذا: Is there a way to remove all the deleted/hidden posts?

وأيضًا حديثًا: Why is it not possible to permanently delete topics or posts?

للأسف، ما ورد أعلاه يشير إلى أنه لا توجد طريقة لحذف البيانات بشكل دائم :(.