C'est deux méthodes s'utilisent de la même manière :
destroy_all(conditions = nil) delete_all(conditions = nil)
La différence est que la méthode destroy_all instancie chaque objet, et lui applique la méthode destroy et du coup les méthodes before_destroy, after_destroy sont appelées, et la gestion de la suppression "en cascade" se fait (:dependent => :destroy), évidemment c'est un peu plus long enfin ça dépend de la quantité de n-uplets dans la base de données.
Delete_all, elle, génére une requête delete et donc elle n'instancie pas les objets c'est donc plus rapide mais aucun callback n'est possible pour before_destroy et after_destroy et les dépendences (exemple: :dependent => :destroy)) sont ignorées.