Ist: on =: create gültig für einen vor_senden Callback in Rails 3.2.3

8

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?

%Vor%

Danke.

    
Nathan 17.05.2012, 17:06
quelle

1 Antwort

15

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):

%Vor%     
cutalion 17.05.2012, 17:56
quelle