Отлично, рад слышать, что это помогло. Таким образом, для объединения ответов можно использовать следующее в консоли Rails, чтобы уничтожить все темы, удаленные более 90 дней назад, повторяя команду столько раз, сколько необходимо, если тем больше 1000:
Topic.with_deleted.where(deleted_at: ...90.days.ago).limit(1000).destroy_all
После завершения этого процесса можно использовать следующее, чтобы уничтожить все сообщения, ставшие сиротами из-за уничтоженных тем:
Post.find_by_sql("select * from posts where topic_id not in (select id from topics)").each { |p| p.destroy }
Стоит отметить, что вышеуказанные команды не уничтожат удалённые сообщения, только удалённые темы и их сиротские сообщения. Чтобы также уничтожить удалённые сообщения старше 90 дней, используйте следующее, снова повторяя при необходимости:
Post.with_deleted.where(deleted_at: ...90.days.ago).limit(1000).destroy_all
P.S. Из любопытства: вы пробовали использовать destroy_all без limit(1000) и столкнулись с проблемами, или вы вообще не пробовали это без ограничения?