Pour supprimer les anciens posts de notre forum, j’ai utilisé cette méthode. Elle résulte de la combinaison de The proper way to completely delete hundred of topics via rails? et des suggestions de @RGJ.
J’ai finalement opté pour cette approche car je souhaitais vraiment supprimer les données de la base de données afin de protéger la vie privée des utilisateurs. Remplacer le texte par « Ce post a été supprimé » laisse l’historique des modifications intact et relativement facile d’accès, ce qui n’est pas suffisant.
Comme nous avions 20 000 sujets à détruire, cela a pris un certain temps !
Topic.with_deleted.where("deleted_at < '2021-08-28'").limit(1000).destroy_all
Cela ayant laissé de nombreux posts orphelins, j’ai dû le compléter par :
Post.where('topic_id not in (select id from topics)').limit(1000).destroy_all