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
?
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
?
Antworten:
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.
after_save
oder erstellt wurde after_create
?
after_save
oder after_create
Rückruf self
ist der Datensatz, der gerade gespeichert wurde, wie er nach dem Speichern vorhanden ist. Das schließt automatisch generierte Felder mögen id
, created_at
, updated_at
.
before_create
, dass ein neues Objekt in der Datenbank gespeichert wird und nicht die eigentliche create
Methode, die aufgerufen wird. Somit before_create
kann auch von der save
Methode noch abgefeuert werden.
before_save
3. und before_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)
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/
before_save :on => :create
funktioniert nicht (zumindest auf Schienen 3.2)
before_save :generate_api_key, :if => :new_record?
before_validation_on_create
undafter_validation_on_create
werden als von Rails 3 entfernt , stattdessen verwendenbefore_validation
undafter_validation
jeweils mit Option:on => :create
.