重现步骤
创建模型X并将其添加到模型文件中:
after_create_commit :do_stuff
after_update_commit :do_stuff
def do_stuff
puts "doing stuff"
end
运行rails控制台:
rails c
创建一个新的X.
X.create(title: "Blah")
我们希望运行after_create_commit回调并打印出“doing stuff”。
after_create_commit回调没有运行,并且没有打印出“doing stuff”。
Rails版本:
5.0.4
Ruby版本:
2.3.1
调用after_update_commit
确实会覆盖添加的回调after_create_commit
,因为在引擎盖下它们都设置了after_commit
具有不同条件的回调。
但是,after_*_commit
别名看起来像是作为不同的回调实现的,这可能会让人感到困惑,因为它可能被认为是一个错误。
来自:after_create_commit and after_update_commit alias don't always run when next to each other
这不起作用:
after_create_commit :foo
after_update_commit :foo, if: :bar?
但这确实有效:
after_create_commit -> { foo }
after_update_commit -> { foo }, if: :bar?
XanderCheung
#1楼