Um alte Beiträge in unserem Forum zu löschen, habe ich dies verwendet. Es ist das Ergebnis einer Kombination aus The proper way to completely delete hundred of topics via rails? und den Vorschlägen von @RGJ.
Ich habe mich schließlich dafür entschieden, da ich die Daten unbedingt aus der Datenbank entfernen wollte, um die Privatsphäre der Nutzer zu schützen. Das Ersetzen des Texts durch „Dieser Beitrag wurde gelöscht" lässt den Bearbeitungsverlauf intakt und relativ leicht zugänglich, was also nicht ausreicht.
Da wir 20.000 Themen zu löschen hatten, hat es eine Weile gedauert!
Topic.with_deleted.where("deleted_at < '2021-08-28'").limit(1000).destroy_all
Da dies viele verwaiste Beiträge hinterließ, musste ich dies mit folgendem Befehl nachbessern:
Post.where('topic_id not in (select id from topics)').limit(1000).destroy_all