Rails 排队计算 after_destroy

Rails queue a calculation after_destroy

我正在实施 resque 以在模型实例被销毁后重新计算一些东西。为此,我使用了 after_destroy 回调。在我实施计算之前,我想测试以确保计算将在不同的子集上执行。

因此,为了对此进行测试,我使用了 rails c --sandbox 并得到了一些令人困惑的信息。这是输出:

> @run = Run.new(status: 0, archived: false)
> @run.save 
> I then print the Run.count and get 200
> @run.destroy!
> I then print the Run.count and get 200

请注意,我正在使用 after_saveafter_destroy 来打印出 Run.count 个相等的数字,但我认为它们应该不同。

我的最终目标是当某些条件发生变化时,将计算添加到重新请求队列并继续。

我的主要问题是。为什么没有改号码?特定 运行 是否会被标记为删除并且不包含在我的计算查询中?

当回调执行时,它在事务中执行。当您在事务结束之前执行计算时,这可能会导致问题。尝试使用after_commit回调,在交易结束后执行。

after_commit :do_something, on: :create
after_commit :do_something, on: :destroy