我有一个使用activerecord生命周期回调的模型非常重要。我正在使用after_commit回调来执行需要在创建时运行主键的sidekiq作业。
after_commit on: :create do
async_process
end
块内的代码永远不会运行。
但是,当我这样做时
after_commit :on => :create do
async_process
end
代码运行良好。
据我了解,这两条不同的行应该以完全相同的方式解释。我错过了什么?
我正在使用ruby 2.0.0p247,Rails 3.2.17。
答案 0 :(得分:0)
它适用于我使用相同的Ruby
和Rails
版本。或者,您可以尝试使用另一种可接受的语法:
after_commit :async_process, on: :create
答案 1 :(得分:0)
我发现使用别名(而不是:on
为我解决了这个问题:
after_create_commit { CreateS3BucketWorker.perform_async(id) }
我所有的逻辑都已经提取到sidekiq worker中,因此创建一个仅用于调用该worker的命名函数似乎是多余的。传递一个块让我打电话给工作程序,并将回调保持在1行。