下面的代码显示了在ActiveRecord中覆盖begin和commit_db_transaction的尝试(对于在MySQL上实现XA事务的rails插件)但是这不起作用。从未到达begin和commit_db_transaction中的代码,而是执行AbstractMysqlAdapter中的原始代码
include语句包含一个模块,其中包含一些XA事务的方法。这些方法工作正常。例如,我可以做“ModelName.connection.xa_transaction_in_progress?”
所以我可以将非现有方法添加到AbstractMysqlAdapter,但我无法覆盖现有方法。我做错了什么?
module ActiveRecord
module ConnectionAdapters
class AbstractMysqlAdapter < AbstractAdapter
include XaTransaction
def begin_db_transaction
original_begin_db_transaction unless xa_transaction_in_progress?
end
def commit_db_transaction
original_commit_db_transaction unless xa_transaction_in_progress?
end
alias_method :original_begin_db_transaction, :begin_db_transaction
alias_method :original_commit_db_transaction, :commit_db_transaction
end
end
end