after_commit块在参数使用hashrocket语法时执行,但在使用冒号语法时不执行

时间:2014-03-24 19:47:13

标签: ruby-on-rails ruby activerecord ruby-2.0 hashrocket

我有一个使用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。

2 个答案:

答案 0 :(得分:0)

它适用于我使用相同的RubyRails版本。或者,您可以尝试使用另一种可接受的语法:

after_commit :async_process, on: :create

答案 1 :(得分:0)

我发现使用别名(而不是:on为我解决了这个问题:

after_create_commit { CreateS3BucketWorker.perform_async(id) }

我所有的逻辑都已经提取到sidekiq worker中,因此创建一个仅用于调用该worker的命名函数似乎是多余的。传递一个块让我打电话给工作程序,并将回调保持在1行。