ActiveRecord事务 - 数据库提交何时实际发生?

时间:2015-01-23 16:58:24

标签: activerecord sidekiq

我遇到Sidekiq没有找到DB记录的问题,我想这是因为在Sidekiq运行之前事务没有完全提交。我的印象是交易是在块内提交的:

User.transaction do
    # db updates here
    # commit or rollback
end

MyWorker.perform_async()

所以我的理解不正确,即使在阻止之后,数据库操作可能还没有完全提交?这就是我所看到的行为。我听说过after_commit,但我正在使用服务对象,并希望将逻辑保留在那里。

1 个答案:

答案 0 :(得分:0)

您的印象是正确的,事务在块结束时提交。如果MyWorker依赖于块中的数据并且块提交,则在作业执行时它应该是可见的,因为作业是在块外部创建的。