ruby-on-rails 如何在Rails中强制提交嵌套事务(4.2)

3htmauhk  于 2022-11-26  发布在  Ruby
关注(0)|答案(1)|浏览(154)

我有一个嵌套事务示例,从Aclass#call方法开始,我在事务块内调用BClass#call方法,现在在Bclass call方法中,直到事务块Aclass call方法完全执行后才提交事务
如何强制Bclass#call方法提交事务。

class Aclass
  def call
    ActiveRecord::Base.transaction do
      Bclass.new.call()
      # other logic to  save some record
    end 

    #publish event to Rabbit Queue 
    publish
  end
end

class Bclass
  def call
    ActiveRecord::Base.transaction do
      # save some record in.
    end

    #publish some event to rabbit queue
    publish
  end
end
zpf6vheq

zpf6vheq1#

大多数常用的DBMS(包括MariaDB、MySQL、PostgreSQL)本身不支持嵌套事务,即:数据库不支持您要执行的操作。
Rails模拟嵌套事务的某些方面(特别是回退的能力),它在事务处理中充当快照。使用这些快照,可以将事务处理的状态回退到以前的某个保存点。但是,它们不允许在实际的“最外层”事务实际提交之前提交某些更改。大多数事务实际上可以提交对其他并发事务可见更改。

相关问题