يمكنك العثور على معرّف الفئة، ثم استخدامه كشرط إضافي في الأمر. على سبيل المثال، أغلق جميع المواضيع المفتوحة في فئة “عامة” التي تم إنشاؤها قبل 24 سبتمبر:
cat_id = Category.find_by_slug('general').id
Topic.where(closed: false).where("created_at < '2024-09-24'").where(category_id: cat_id).find_each do |topic|
topic.update_status('closed', true, Discourse.system_user)
end
هذه الأنواع من العمليات تجعلني متوتراً بعض الشيء دائماً. تأكد من إنشاء نسخة احتياطية من قاعدة بياناتك قبل تشغيلها في حال حدث خطأ ما. قد يكون من الجيد أيضاً إجراء نوع من الفحص المسبق للتأكد من أنك تعمل على البيانات الصحيحة. إحدى الطرق للقيام بذلك هي إرجاع count للمواضيع التي سيتم إجراء العملية عليها. على سبيل المثال:
Topic.where(closed: false).where("created_at < '2024-09-24'").where(category_id: cat_id).count