Massenschließen alter Themen älter als x?

Hallo,

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önnten versuchen, diese Einstellung in den Kategorieeinstellungen zu verwenden:

Ich bin mir nicht sicher, ob dies rückwirkend Dinge schließt, aber es ist einen Versuch wert.

Mein anderer Gedanke war, einen erweiterten Filter zu verwenden und ein Vorher-Datum festzulegen:

Von dort aus können Sie Massenaktionen für die angezeigten Themen verwenden.

Sie können Themen in großen Mengen mit Performing bulk actions as a moderator schließen.
Aber je nachdem, wie viele Themen Sie schließen möchten, ist Administrative Bulk Operations möglicherweise die bessere Wahl.

Ja, es gäbe etwas Ähnliches, wie kann ich es auf eine Kategorie eingrenzen?

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:

Topic.where(closed: false).where("created_at < '2024-09-24'").where(category_id: cat_id).count