Ich habe ein Forum von XenForo nach Discourse migriert und möchte nun viele alte Beiträge schließen. Gibt es eine Möglichkeit, “alle Themen älter als x Monate schließen” zu sagen? Ich habe dies bereits in der Kategorie eingestellt, aber es funktioniert nur für neue Themen.
Sie können die Kategorie-ID finden und sie dann als zusätzliche Bedingung im Befehl verwenden. Schließen Sie beispielsweise alle offenen Themen in der Kategorie „Allgemein“, die vor dem 24. September erstellt wurden:
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
Diese Art von Operationen macht mich immer ein wenig nervös. Stellen Sie sicher, dass Sie ein Backup Ihrer Datenbank erstellen, bevor Sie sie ausführen, falls etwas schief geht. Es könnte auch eine gute Idee sein, eine Art Vorabprüfung durchzuführen, um sicherzustellen, dass Sie die richtigen Daten bearbeiten. Eine Möglichkeit, dies zu tun, wäre die Rückgabe der count von Themen, auf die die Operation angewendet wird. Zum Beispiel: