web-dev-qa-db-fra.com

Comment supprimez-vous un objet ActiveRecord?

Comment supprimez-vous un objet ActiveRecord?

J'ai regardé Active Record Querying et il n'y a rien sur la suppression que je puisse voir.

  1. Supprimer par id,

  2. Supprimez l'objet actuel comme: user.remove,

  3. Pouvez-vous supprimer sur la base d'une clause where?

305
Blankman

Ce sont destroy et 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)

Vous pouvez également utiliser delete et delete_all qui n'imposera pas les rappels :before_destroy et :after_destroy ou toute option d'association dépendante.

User.delete_all(condition: 'value') vous permettra de supprimer des enregistrements sans clé primaire

Note: du 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, destroy_all avec conditions et delete_all avec conditions est déconseillé dans Rails 5.1 - voir guides.rubyonrails. org/5_1_release_notes.html

546
Marek Sapota

Il existe delete, delete_all, destroy et destroy_all.

Les documents sont les suivants: documents plus anciens et documents Rails 3.0.

delete n'instancie pas les objets, alors que destroy le fait. En général, delete est plus rapide que destroy.

60
  1. User.destroy

User.destroy(1) supprimera l'utilisateur avec id == 1 et :before_destroy et :after_destroy rappels se produisent. Par exemple, si vous avez des enregistrements associés

has_many :addresses, :dependent => :destroy

Après la destruction de l'utilisateur, ses adresses seront également détruites. Si vous utilisez plutôt l'action delete, les rappels ne se produiront pas.

  1. User.destroy, User.delete

  2. User.destroy_all(<conditions>) ou User.delete_all(<conditions>)

Notice: l'utilisateur est une classe et l'utilisateur est un objet d'instance

45
Tadas Tamosauskas