حذف جميع الرسائل من مستخدم في فئة

مرحبًا يا رفاق،

حاليًا، واجهتُ الحاجة إلى حذف جميع منشورات مستخدم معين في فئة محددة. متجاوزًا “النقاشات” حول حذف المحتوى، ظننتُ: “أوه، سهل، مجرد استخدام البحث ثم تحديد جميع النتائج باستخدام مربعات الاختيار وحذفها”.

غير أن الأمر يبدو أن هذا الإجراء يسمح لي بحذف المواضيع وليس الرسائل بحد ذاتها، رغم أن نتائج البحث تُظهر الرسائل وليس بالضرورة المواضيع (مع أن المواضيع تظهر أيضًا، نعم).

هل توجد طريقة “آمنة” للقيام بذلك؟ في البداية، اعتقدتُ أن الأمر قد يتطلب تدخلاً متطرفًا في قاعدة البيانات (ولم أستبعد هذه الاحتمالية)، ولكن بما أنني أستطيع حذف أكثر من 50 موضوعًا دفعة واحدة من الواجهة الرسومية… فربما توجد طريقة لحذف الرسائل فقط؟ (أو طريقة باستخدام وحدة التحكم، فأنا لا أريد “التجربة” وإتلاف قاعدة البيانات :P)

شكرًا لكم!

إعجاب واحد (1)

ليس لدي خبرة شخصية بهذه الأمور، لكنني أعتقد أنه يمكنك الحذف «اللطيف» باستخدام واجهة برمجة التطبيقات (API) -

وهناك بعض المواضيع حول الحذف «القاسي» إذا بحثت عن ‘rails delete post’.

إذا أمكنك تقديم المزيد من التفاصيل حول ما تحاول تحقيقه، فقد يكون لدى الأشخاص نصائح أكثر تحديدًا.

مرحبًا @JammyDodger

شكرًا على الروابط.

أنا فقط أريد حذف جميع الرسائل من مستخدم معين في فئة محددة. :stuck_out_tongue:

ملاحظة: ربما باستخدام وحدة التحكم؟ أنا فقط لا أريد تدمير قاعدة بياناتي…

إعجاب واحد (1)

هناك نقاش مستمر حول شيء مشابه في هذا الموضوع: Delete deleted-posts permanently in bulk?

نأمل أن يوفر ذلك بعض الإلهام؟

نعتذر عن النيكرو، سعيد بإنشاء منشور جديد إذا لزم الأمر.

لدينا فئة السياسة وبعض المستخدمين يرغبون في حذف جميع منشوراتهم من هذه الفئة لأسباب واضحة. هل هناك أي طريقة للقيام بذلك بسهولة نيابة عنهم؟

يمكن أن يكون الحل هو استخدام وحدة تحكم Rais.

cd /var/discourse
./launcher enter app
rails c

بعد ذلك، يمكنك اتباع النموذج التالي عن طريق ملء slug الفئة و اسم المستخدم.
يمكنك نسخ الكود ولصقه في وحدة التحكم.

ملاحظة:

  • لا يحذف المنشور الأول لتجنب حذف الموضوع
  • إذا كنت تستهدف فئة فرعية، فقم بتوفير الفئة الأم، على سبيل المثال: parent_cat_slug/cat_slug.

:warning: يرجى عمل نسخة احتياطية قبل إجراء أي تغييرات.

Category
  .find_by_slug_path_with_id("=CATEGORY_SLUG=")
  .tap do |c|
    u = User.find_by_username("=USERNAME=")
    Post
      .joins(:topic)
      .where(user_id: u.id)
      .where("topics.category_id = ?", c.id)
      .where.not(post_number: 1)
      .where(deleted_at: nil)
      .find_each { |p| PostDestroyer.new(Discourse.system_user, p).destroy }
  end
إعجاب واحد (1)

شكراً! هذا رائع.