如何判断Rails中的父事务是否可加入(joinable)?
如何检查Active Record事务是否设置了
joinable: false 你可以通过Active Record连接对象的current_transaction方法获取当前的事务对象,再调用它的joinable?方法来判断——如果该方法返回false,就说明事务设置了joinable: false。
示例代码
# 替换YourModel为你的实际模型类 current_transaction = YourModel.connection.current_transaction if YourModel.connection.transaction_open? && current_transaction if current_transaction.joinable? puts "当前事务是可连接的(未设置joinable: false)" else puts "当前事务设置了joinable: false" end end
注意事项
current_transaction在Rails 5.0及以上版本可用,若使用更低版本,可能需要依赖内部APItransaction_stack(不推荐长期使用,因为属于未公开的内部实现,可能随Rails版本变更):# 遍历事务栈查看所有事务的joinable状态 YourModel.connection.transaction_stack.each do |tx| puts "事务joinable状态: #{tx.joinable?}" end- 若没有事务在运行,
current_transaction可能返回一个空事务对象,所以先通过transaction_open?确认事务存在后再检查会更稳妥。
内容的提问来源于stack exchange,提问作者New To Blue
相关产品推荐
相关产品推荐

