Wie Sie wissen, werden before_save
Callbacks vor before_create
Callbacks ausgeführt.
Daher haben einige Leute vorgeschlagen, dass es besser wäre, before_save :method, :on => :create
anstelle von before_create
zu verwenden, damit die Callback-Methode zur richtigen Zeit in Relation zu anderen Callbacks ausgeführt wird (wie zum Beispiel Autosave-Callbacks). Siehe zum Beispiel diesen Pivotal Labs-Blogbeitrag und diese StackOverflow-Antwort .
Soweit ich feststellen kann, erreicht die Option :on => :create
jedoch nicht den gewünschten Effekt für einen before_save
Callback. Mit anderen Worten, der Rückruf wird für jeden Speichervorgang ausgeführt, unabhängig davon, ob es sich um ein Erstellen handelt oder nicht.
Die Option :on => :create
scheint jedoch für before_validation
-Rückrufe gültig zu sein.
Könnte jemand bestätigen, ob :on => :create
für before_save
funktionieren soll? Hat es in früheren Versionen von Rails funktioniert und ist jetzt defekt, oder sind die oben genannten Links einfach falsch?
Wenn :on => :create
nicht gültig ist, ist das Folgende akzeptabel und / oder gibt es einen besseren Weg?
Danke.
Sie haben recht, es gibt keine :on
Option für before_save
Callback.
Aber ich verstehe nicht, warum before_save
anstelle von before_create
verwenden.
before_create
callback wird direkt nach before_save
aufgerufen.
Natürlich können Sie before_save :callback_method, :if => :new_record?
verwenden. Aber mir persönlich gefällt diese Lösung nicht - was ist, wenn ich Bedingungen in der Option :if
hinzufügen muss?
Wenn eine Abhängigkeit zwischen den Callbacks before_save
und before_create
besteht, würde ich vorschlagen, 2 Callbacks zu kombinieren. Zum Beispiel (Pseudocode):
Tags und Links ruby-on-rails activerecord ruby-on-rails-3.2 before-save