2016-06-30 6 views
0

Ich möchte die after_commit Callback überspringen, wenn destroy ein Objekt, ohne explizite Angabe einer Liste von Methoden mit der on Syntax. I.e. so etwas wie:Skip nach_commit on destroy in rails

after_commit :foo, except: [:destroy] 
+0

downvoters, pflege zu erklären? – dimid

Antwort

2

Ich habe einen Weg gefunden, es auf Ruby Tips zu tun:

after_commit :foo, if: :persisted? 

oder für komplexere Bedingungen:

after_commit, :foo, if: Proc.new {|record| record.persisted? && [...]} 
+0

Ich würde mich wundern, warum Sie das vor dem expressiveren Ansatz 'außer: []' bevorzugen würden? – oreoluwa

+0

@oreoluwa, würde ich es verwenden, wenn ': on' ein Gegenteil wie': except' hätte. – dimid

0

Die kürzeste Lösung wird derjenige geteilt durch @dimid, aber ich glaube, im Moment ist der pragmatische Ansatz, die Ereignisse aufzulisten, die Sie behandeln wollen, und lassen Sie einfach :destroy weg. Es gibt 3 verfügbare :on Optionen sofort, :create, :update und :destroy.

auszuführen foo auf erstellen & Update:

after_commit :foo, :on => [:create, :update]

Alternativ:

after_commit :foo, on: :create after_commit :foo, on: :update

Oder da Rails 5 (https://github.com/rails/rails/pull/22516) ist es auch möglich:

after_create_commit :foo after_update_commit :foo