Ruby on rails 添加到ActiveRecord::ConnectionAdapters::MysqlAdapter
出于一般知识和娱乐目的,我尝试向Rails添加一些行为。我想要的只是在Rails运行的每个select语句之前运行一个Mysql“EXPLAIN”语句。我认为这应该可以,但我得到了错误: /usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active\u-support/core\u ext/module/aliasing.rb:32:inRuby on rails 添加到ActiveRecord::ConnectionAdapters::MysqlAdapter,ruby-on-rails,ruby-on-rails-plugins,Ruby On Rails,Ruby On Rails Plugins,出于一般知识和娱乐目的,我尝试向Rails添加一些行为。我想要的只是在Rails运行的每个select语句之前运行一个Mysql“EXPLAIN”语句。我认为这应该可以,但我得到了错误: /usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active\u-support/core\u ext/module/aliasing.rb:32:inalias\u方法:未定义的方法 此类位于初始值设定项目录中。代码如下: module Expl
alias\u方法:未定义的方法
此类位于初始值设定项目录中。代码如下:
module Explanifier
def self.included(base)
base.class_eval do
extend ClassMethods
alias_method_chain :select, :explain
end
end
module ClassMethods
def select_with_explain(sql, name = nil)
puts "testing!!!"
execute('EXPLAIN ' + sql, name)
select_without_explain(sql, name)
end
end
end
class ActiveRecord::ConnectionAdapters::MysqlAdapter
include Explanifier
end
有人能解释一下我在这里遗漏了什么吗?将别名\u方法\u链放入ClassMethods模块中。因为您像classMethod和alias一样定义了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
只是偶然发现了这个
您不能从base.class\u eval
中调用它,显然也不能将它放入ClassMethods
模块中。(由于ClassMethods
模块中没有select
方法,是否存在?)
方法是这样做:
def self.included(base)
base.extend ClassMethods
class << base
alias_method_chain :select, :explain
end
end
def自带(基本)
base.extend类方法
班