我是否有办法在一个方法中验证它是否与活动的事务块一起运行?基本上我们有一些库方法可以执行一些应该在Transaction块中运行的ActiveRecord保存操作(以便在任何操作失败时回滚所有内容),并且一些使用我们库的用户不会将这些方法包装在事务中
我希望有一些帮助方法可以像withinTransactionBlock?
那样编写,它可以验证ActiveRecord事务并在返回false时引发异常。
如果目前不可能,我怎么开始编写这样一种方法,确保我的库中的几个方法以原子方式运行(除了将排序的方法的每个排列打包成单独的函数)?
答案 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