web-dev-qa-db-fra.com

Ruby sur Rails Callback, quelle est la différence entre: before_save et: before_create?

Pourriez-vous expliquer en détail ce que le :before_save et :before_create Ruby sur Rails sont des rappels et ce qu’ils ont à faire avec Rails validations. La validation est effectuée après :before_save ou :before_create?

174
Agung Prasetyo

Dans une opération de création sous Rails, il existe six rappels avant l'opération de base de données et deux après. Dans l'ordre, ce sont:

  1. before_validation
  2. before_validation_on_create
  3. after_validation
  4. after_validation_on_create
  5. before_save
  6. before_create

    DATABASE INSERT
  7. after_create
  8. after_save

Les opérations de mise à jour ont exactement le même ensemble, sauf read update au lieu de create partout (et UPDATE au lieu de INSÉREZ ).

A partir de là, vous pouvez voir que la validation est effectuée avant le before_save et before_create rappels.

Le before_save se produit légèrement avant le before_create. À ma connaissance, rien ne se passe entre eux. mais before_save se déclenche également lors des opérations de mise à jour, tandis que before_create ne tirera que sur Crée.

352
Chowlett

before_save est appelé à chaque fois qu'un objet est enregistré. Donc, pour les objets nouveaux et existants. (créer et mettre à jour l'action)

before_create seulement avant la création. Donc seulement pour les nouveaux objets (créer une action)

129
Michael Koper

before_create contre before_save :on => :create

Parfois, vous devez faire attention à l'ordre des rappels

Voir ici pour plus de détails: http://pivotallabs.com/activerecord-callbacks-autosave-before-this-and-that-etc/

2
23inhouse