我想觸發相同功能after_commit
兩個update
和create
但我想申請一個特定的條件只爲update
。軌道4個after_commit嵌套條件問題
現在,我唯一的解決辦法是複製的功能,使兩種不同的after_commit
這樣的:
after_commit :my_method_on_update,
on: :update,
if: ->(foo) { foo.previous_changes.key?(:bar) }
after_commit :my_method_on_destroy, on: :destroy
def my_method_on_update
# stuff
end
def my_method_on_destroy
# same stuff here
end
當然它的工作原理,但它不會使代碼DRY可言。我敢肯定有一個更好的解決方案,但我還沒有發現任何相關的例子在官方的軌道doc
我想什麼是這樣的:
after_commit :my_method,
on: :update,
if: ->(foo) { foo.previous_changes.key?(:bar) },
on: destroy
def my_method
# stuff
end
但有一個誤差兩次聲明on
。
您好,感謝你的快速回答和你的建議!但是,我不認爲你的技巧可以幫助我,因爲我需要在'create'或'update'上做同樣的事情。唯一的問題是,如果條件不能在'update'上完成,我就不會做任何事情。 –
@MaxChrétien看到我的編輯 - 你可以讓這個方法不做任何事情!儘管說實話我仍然認爲有兩個'after_commit'掛鉤會更清晰。 – omnikron
完美!你知道我是否可以將'if'條件放在'after_commit'的同一行嗎? –