C'est destroy
et les destroy_all
méthodes, comme
user.destroy
User.find(15).destroy
User.destroy(15)
User.where(age: 20).destroy_all
User.destroy_all(age: 20)
Alternativement, vous pouvez utiliser delete
et delete_all
qui n'appliquera pas :before_destroy
et les :after_destroy
rappels ou toute option d'association dépendante.
User.delete_all(condition: 'value')
vous permettra de supprimer des enregistrements sans clé primaire
Remarque : d'après le commentaire de @ hammady, user.destroy
ne fonctionnera pas si le modèle utilisateur n'a pas de clé primaire.
Note 2 : D'après le commentaire de @ pavel-chuchuva, les destroy_all
conditions et les delete_all
conditions ont été dépréciées dans Rails 5.1 - voir guides.rubyonrails.org/5_1_release_notes.html
User.find_by(username:"bob")
est également utile d'identifier l'enregistrement à détruire ou à supprimer.Il y a
delete
,delete_all
,destroy
etdestroy_all
.Les documents sont: des documents plus anciens et des documents Rails 3.0.0
delete
n'instancie pas les objets, alors qu'il ledestroy
fait. En général,delete
est plus rapide quedestroy
.la source
delete
est plus rapide mais contourne les rappels que vous auriez pu définir sur le modèleUser.destroy
User.destroy(1)
supprimera l'utilisateur avecid == 1
et:before_destroy
et les:after_destroy
rappels se produiront. Par exemple, si vous avez des enregistrements associésUne fois l'utilisateur détruit, ses adresses seront également détruites. Si vous utilisez plutôt l'action de suppression, aucun rappel ne se produira.
User.destroy
,User.delete
User.destroy_all(<conditions>)
ouUser.delete_all(<conditions>)
Remarque : l'utilisateur est une classe et l'utilisateur est un objet d'instance
la source
User.destroy_all()
exécute les rappels, donc avant de supprimer quoi que ce soit, il charge les enregistrements. Ce sont deux instructions SQL et non une seule. Outre les implications en termes de performances, cela a également des implications sur la concurrence. L'appel le plus sûr ignore les rappels;User.delete_all()
émettra une seuleDELETE FROM...
commande.