添加到ActiveRecord :: ConnectionAdapters :: MysqlAdapter

时间:2010-03-04 21:24:01

标签: ruby-on-rails ruby-on-rails-plugins

出于一般知识和娱乐目的,我试图在Rails中添加一些行为。我正在寻找的只是在Rails运行的每个select语句之前运行一个Mysql“EXPLAIN”语句。我认为这应该可行,但我收到错误:

对于类ActiveRecord :: <{{{{{{{{{{{{ ConnectionAdapters :: MysqlAdapter'(NameError)

该类位于初始化器目录中。这是代码:

alias_method': undefined method

有人可以解释我在这里缺少的东西吗?

2 个答案:

答案 0 :(得分:0)

将alias_method_chain放入ClassMethods模块中。因为你定义了像classMethod这样的方法,并为InstanceMethod

设置了别名

    module Explanifier

      def self.included(base)

        base.class_eval do
          extend ClassMethods



        end
      end
      module ClassMethods
        def select_with_explain(sql, name = nil)
          puts "testing!!!"
          execute('EXPLAIN ' + sql, name)
          select_without_explain(sql, name)
        end
        alias_method_chain :select, :explain
      end

    end

答案 1 :(得分:0)

偶然发现了这一点。

您无法在base.class_eval内调用它,显然您无法将其置于ClassMethods模块中。 (由于select模块中没有ClassMethods方法,有吗?)

要做的就是这样做:

def self.included(base)
  base.extend ClassMethods
  class << base
    alias_method_chain :select, :explain
  end
end

你只需要通过那里的鬼类来访问它。希望它有所帮助。