Чтобы удалить старые посты на нашем форуме, я использовал этот подход. Он основан на комбинации 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