当社のフォーラムから古い投稿を削除するために、以下の方法を使用しました。これは、The proper way to completely delete hundred of topics via rails? と @RGJ さんの提案を組み合わせたものです。
最終的にこの方法を選んだのは、ユーザーのプライバシーを保護するため、データベースからデータを完全に削除したかったからです。「この投稿は削除されました」と書き換えるだけでは編集履歴が残ったままになり、比較的簡単にアクセスできてしまうため、不十分でした。
20,000 件のトピックを削除する必要があったため、時間がかかりました!
Topic.with_deleted.where("deleted_at < '2021-08-28'").limit(1000).destroy_all
これでは多くの孤立した投稿が残ってしまうため、続けて以下の処理を行いました:
Post.where('topic_id not in (select id from topics)').limit(1000).destroy_all