Können Sie detailliert erklären, was die Rückrufe :before_save
und :before_create
Ruby on Rails sind und was sie mit Rails-Validierungen zu tun haben? Erfolgt die Validierung nach :before_save
oder :before_create
?
quelle
Können Sie detailliert erklären, was die Rückrufe :before_save
und :before_create
Ruby on Rails sind und was sie mit Rails-Validierungen zu tun haben? Erfolgt die Validierung nach :before_save
oder :before_create
?
Bei einer Erstellungsoperation unter Rails gibt es sechs Rückrufe vor der Datenbankoperation und zwei danach. In der Reihenfolge sind dies:
before_validation
before_validation_on_create
after_validation
after_validation_on_create
before_save
before_create
after_create
after_save
Aktualisierungsvorgänge haben genau den gleichen Satz, außer dass Lesen update
statt create
überall (und UPDATE anstelle von EINFÜGEN ).
Daraus können Sie ersehen, dass die Validierung vor dem before_save
und den before_create
Rückrufen durchgeführt wird.
Das before_save
tritt kurz vor dem auf before_create
. Nach meinem besten Wissen passiert nichts zwischen ihnen; wird aber before_save
auch bei Aktualisierungsvorgängen ausgelöst, während before_create
nur bei Erstellungsvorgängen ausgelöst wird.
before_validation_on_create
undafter_validation_on_create
werden als von Rails 3 entfernt , stattdessen verwendenbefore_validation
undafter_validation
jeweils mit Option:on => :create
.after_save
oder erstellt wurdeafter_create
?after_save
oderafter_create
Rückrufself
ist der Datensatz, der gerade gespeichert wurde, wie er nach dem Speichern vorhanden ist. Das schließt automatisch generierte Felder mögenid
,created_at
,updated_at
.before_create
, dass ein neues Objekt in der Datenbank gespeichert wird und nicht die eigentlichecreate
Methode, die aufgerufen wird. Somitbefore_create
kann auch von dersave
Methode noch abgefeuert werden.before_save
3. undbefore_create
5. Platz auf.before_save
wird jedes Mal aufgerufen, wenn ein Objekt gespeichert wird. Also für neue und bestehende Objekte. (Aktion erstellen und aktualisieren)before_create
nur vor der Schöpfung. Also nur für neue Objekte (Aktion erstellen)quelle
before_create
vs.before_save :on => :create
Manchmal muss man auf die Reihenfolge der Rückrufe achten
Weitere Informationen finden Sie hier: http://pivotallabs.com/activerecord-callbacks-autosave-before-this-and-that-etc/quelle
before_save :on => :create
funktioniert nicht (zumindest auf Schienen 3.2)before_save :generate_api_key, :if => :new_record?