1

我有一个模型大量使用 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。

4

2 回答 2

0

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

after_commit :async_process, on: :create
于 2014-03-24T20:09:51.233 回答
0

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

after_create_commit { CreateS3BucketWorker.perform_async(id) }

我的所有逻辑都已经提取到 sidekiq worker 中,因此创建一个命名函数只是为了调用 worker 似乎过度了。传入一个块让我打电话给工人并将我的回调保持在 1 行。

于 2019-02-12T23:29:24.017 回答