验证ActiveRecord事务的存在

时间:2014-10-14 19:41:55

标签: ruby-on-rails ruby activerecord transactions

我是否有办法在一个方法中验证它是否与活动的事务块一起运行?基本上我们有一些库方法可以执行一些应该在Transaction块中运行的ActiveRecord保存操作(以便在任何操作失败时回滚所有内容),并且一些使用我们库的用户不会将这些方法包装在事务中

我希望有一些帮助方法可以像withinTransactionBlock?那样编写,它可以验证ActiveRecord事务并在返回false时引发异常。

如果目前不可能,我怎么开始编写这样一种方法,确保我的库中的几个方法以原子方式运行(除了将排序的方法的每个排列打包成单独的函数)?

1 个答案:

答案 0 :(得分:1)

是的,您可以查看使用

打开的任何交易
class User < ActiveRecord::Base
  def check_transaction
    p self.class.connection.transaction_open?
  end
end

User.new.check_transaction
# false

User.transaction do
  User.new.check_transaction
end  
# true

即使在另一个AR子类上打开了交易

Account.transaction do
  User.new.check_transaction  
end  
# true