Pourriez-vous expliquer en détail ce que sont les rappels :before_save
et :before_create
Ruby on Rails, et ce qu'ils ont à voir avec les validations Rails? La validation a-t-elle lieu après :before_save
ou :before_create
?
la source
Pourriez-vous expliquer en détail ce que sont les rappels :before_save
et :before_create
Ruby on Rails, et ce qu'ils ont à voir avec les validations Rails? La validation a-t-elle lieu après :before_save
ou :before_create
?
Dans une opération de création sous Rails, il y a six rappels avant l'opération de base de données et deux après. Dans l'ordre, ce sont:
before_validation
before_validation_on_create
after_validation
after_validation_on_create
before_save
before_create
after_create
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 INSERT ).
À partir de là, vous pouvez voir que la validation est effectuée avant les rappels before_save
et before_create
.
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éclenchera également sur les opérations de mise à jour, tandis que before_create
ne se déclenchera que sur Creates.
before_validation_on_create
etafter_validation_on_create
sont supprimés à partir de Rails 3 , utilisez à la placebefore_validation
etafter_validation
respectivement avec option:on => :create
.after_save
ouafter_create
?after_save
ouafter_create
,self
est l'enregistrement qui vient d'être enregistré, tel qu'il existe après la sauvegarde. Cela inclut des champs générées automatiquement aimentid
,created_at
,updated_at
.before_create
s'agit d'un nouvel objet enregistré dans la base de données, et non de lacreate
méthode réellement appelée. Ainsi,before_create
peut toujours être tiré même de lasave
méthode.before_save
3e etbefore_create
5e.before_save
est appelée à chaque fois qu'un objet est enregistré. Donc pour les objets nouveaux et existants. (créer et mettre à jour une action)before_create
seulement avant la création. Donc uniquement pour les nouveaux objets (créer une action)la source
before_create
contrebefore_save :on => :create
Il faut parfois faire attention à l'ordre des rappels
Voir ici pour plus de détails: http://pivotallabs.com/activerecord-callbacks-autosave-before-this-and-that-etc/la source
before_save :on => :create
ne fonctionne pas (au moins sur les rails 3.2)before_save :generate_api_key, :if => :new_record?