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_save
和 after_destroy
来打印出 Run.count 个相等的数字,但我认为它们应该不同。
我的最终目标是当某些条件发生变化时,将计算添加到重新请求队列并继续。
我的主要问题是。为什么没有改号码?特定 运行 是否会被标记为删除并且不包含在我的计算查询中?
当回调执行时,它在事务中执行。当您在事务结束之前执行计算时,这可能会导致问题。尝试使用after_commit
回调,在交易结束后执行。
after_commit :do_something, on: :create
after_commit :do_something, on: :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_save
和 after_destroy
来打印出 Run.count 个相等的数字,但我认为它们应该不同。
我的最终目标是当某些条件发生变化时,将计算添加到重新请求队列并继续。
我的主要问题是。为什么没有改号码?特定 运行 是否会被标记为删除并且不包含在我的计算查询中?
当回调执行时,它在事务中执行。当您在事务结束之前执行计算时,这可能会导致问题。尝试使用after_commit
回调,在交易结束后执行。
after_commit :do_something, on: :create
after_commit :do_something, on: :destroy