Je recherche la meilleure approche pour supprimer des enregistrements d'une table. Par exemple, j'ai un utilisateur dont l'ID utilisateur figure sur de nombreuses tables. Je veux supprimer cet utilisateur et chaque enregistrement qui a son ID dans toutes les tables.
u = User.find_by_name('JohnBoy')
u.usage_indexes.destroy_all
u.sources.destroy_all
u.user_stats.destroy_all
u.delete
Cela fonctionne et supprime toutes les références de l'utilisateur de toutes les tables, mais j'ai entendu dire que le destroy_all
processus était très lourd, alors j'ai essayé delete_all
. Il supprime uniquement l'utilisateur de sa propre table utilisateur et le id
de toutes les autres tables est rendu nul, mais laisse les enregistrements intacts. Quelqu'un peut-il partager le processus correct pour effectuer une tâche comme celle-ci?
Je vois que cela destroy_all
appelle la destroy
fonction sur tous les objets associés mais je veux juste confirmer la bonne approche.
delete_all
, et 2)destroy_all
instancie tous les enregistrements et les détruit un à la fois, donc avec un très grand ensemble de données, cela pourrait être très lent.