覆盖类中的方法

时间:2012-08-25 12:30:05

标签: ruby-on-rails ruby

下面的代码显示了在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

0 个答案:

没有答案