Können Sie detailliert erklären, was die Rückrufe :before_saveund :before_createRuby on Rails sind und was sie mit Rails-Validierungen zu tun haben? Erfolgt die Validierung nach :before_saveoder :before_create?
Können Sie detailliert erklären, was die Rückrufe :before_saveund :before_createRuby on Rails sind und was sie mit Rails-Validierungen zu tun haben? Erfolgt die Validierung nach :before_saveoder :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_validationbefore_validation_on_createafter_validationafter_validation_on_createbefore_savebefore_create
after_createafter_saveAktualisierungsvorgänge haben genau den gleichen Satz, außer dass Lesen updatestatt createüberall (und UPDATE anstelle von EINFÜGEN ).
Daraus können Sie ersehen, dass die Validierung vor dem before_saveund den before_createRückrufen durchgeführt wird.
Das before_savetritt kurz vor dem auf before_create. Nach meinem besten Wissen passiert nichts zwischen ihnen; wird aber before_saveauch bei Aktualisierungsvorgängen ausgelöst, während before_createnur bei Erstellungsvorgängen ausgelöst wird.
after_saveoder erstellt wurde after_create?
after_saveoder after_createRückruf selfist 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 createMethode, die aufgerufen wird. Somit before_createkann auch von der saveMethode noch abgefeuert werden.
before_save3. und before_create5. Platz auf.
before_savewird jedes Mal aufgerufen, wenn ein Objekt gespeichert wird. Also für neue und bestehende Objekte. (Aktion erstellen und aktualisieren)
before_createnur 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 => :createfunktioniert nicht (zumindest auf Schienen 3.2)
before_save :generate_api_key, :if => :new_record?
before_validation_on_createundafter_validation_on_createwerden als von Rails 3 entfernt , stattdessen verwendenbefore_validationundafter_validationjeweils mit Option:on => :create.