199 votes

Rails : charge => : détruire VS : charge => : delete_all

Dans les guides de rails, il est décrit comme ceci :

Les objets seront en outre détruites si elles sont associées et supprimés s’ils sont associés

Droite, cool. Mais quelle est la différence entre être détruite et en cours de suppression ? J’ai essayé les deux et il semble faire la même chose.

206voto

shingara Points 26980

La différence est avec rappel.

La : delete_all, faite directement dans votre demande la suppression de SQL :

Avec les : détruire, il y a une instanciation de l’ensemble de vos enfants. Oui, si vous ne pouvez pas détruire ou si chacun a ses propres : dépendant, le son peut être appelée.

133voto

John Topley Points 58789

Sur les Rails de modèle d'association, vous pouvez spécifier l' :dependent option, qui peut prendre l'une des trois formes suivantes:

  • :destroy/:destroy_all Les objets associés sont détruits à côté de cet objet en les appelant par leurs destroy méthode
  • :delete/:delete_all Tous les objets associés sont immédiatement détruites sans l'appel de leur :destroy méthode
  • :nullify Tous les objets associés à' les clés étrangères sont définies à l' NULL sans appel de leur save rappels

33voto

Manish Shrivastava Points 4380

Voir détruire supprime ses éléments associés,delete_all pouvez supprimer plusieurs données de l'auto de table comme DELETE * FROM table where field = 'xyz'

:En fonction des options possibles:

Les contrôles de ce qui se passe pour les objets associés lorsque leur propriétaire est détruit. Notez que ces derniers sont mis en œuvre comme des rappels, et les Rails exécute les rappels à l'ordre. Par conséquent, les autres semblables rappels peuvent affecter l' :en fonction du comportement, et l' :dependent comportement peut affecter d'autres rappels.

:destroy des causes de tous les objets associés aussi être détruits.

:delete_all des causes de tous les associés de supprimer les objets directement à partir de la base de données (rappels ne sera pas exécuté).

:nullify des causes les clés étrangères pour être mis à NULL. Les rappels ne sont pas exécutées.

:restrict_with_exception des causes d'une exception soulevée de savoir s'il existe des enregistrements associés.

:restrict_with_error provoque une erreur à être ajouté à la propriétaire si il y a des objets qui y sont associés.

En cas d'utilisation avec l' :through option, l'association sur la jointure modèle doit être un belongs_to, et les dossiers qui sont supprimés sont les enregistrements de jointure, plutôt que des enregistrements associés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X