# Alias\_method

**URL:** <https://www.ruby-forum.com/t/alias-method/94964>\
**Category:** Ruby\
**Created:** [May 18, 2006, 9:20am UTC](https://www.ruby-forum.com/t/alias-method/94964 "2006-05-18T09:20:35Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![SSSSSSSS\_SS\_SSS](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/fbc32d/32.png) [@SSSSSSSS\_SS\_SSS](https://www.ruby-forum.com/u/SSSSSSSS_SS_SSS)\
**Post date:** [May 18, 2006, 9:20am UTC](https://www.ruby-forum.com/t/alias-method/94964/1 "2006-05-18T09:20:35Z")

</div>

hi, i want to extend the ActiveRecord::Base.establish\_connection, i do  
it as fellow:

module ActiveRecordExtension  
def self.included(klass) #nodoc  
klass.extend(ClassMethods)  
klass.class\_eval do  
alias\_method :old\_establish\_connection, :establish\_connection  
alias\_method :establish\_connection, :my\_establish\_connection  
end  
end

module ClassMethods  
def my\_establish\_connection(spec = nil)  
old\_establish\_connection(spec)  
end  
end  
end

when it be included, then a error issue:

./lib/activerecord/extension.rb:18:in `alias_method': undefined method`establis  
h\_connection’ for class `ActiveRecord::Base’ (NameError), but the  
ActiveRecord:Base.respond\_to(:establis  
h\_connection) is true.

why?

---

<div class="post-metadata">

**Author:** ![SSSSSSSS\_SS\_SSS](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/fbc32d/32.png) [@SSSSSSSS\_SS\_SSS](https://www.ruby-forum.com/u/SSSSSSSS_SS_SSS)\
**Post date:** [May 18, 2006, 11:12am UTC](https://www.ruby-forum.com/t/alias-method/94964/2 "2006-05-18T11:12:43Z")

</div>

> > > > > “B” == =?GB2312?B?wfXDz72t?= writes:

B\> ./lib/activerecord/extension.rb:18:in `alias_method': undefined method B>`establis  
B\> h\_connection’ for class `ActiveRecord::Base’ (NameError), but the  
B\> ActiveRecord:Base.respond\_to(:establis  
B\> h\_connection) is true.

You want probably alias with instance\_eval

moulon% cat b.rb  
#!/usr/bin/ruby  
module A  
class B  
def self.b  
end  
end  
end

def included(klass)  
klass.instance\_eval do  
alias c b  
end  
p “instance\_eval : #{klass.respond\_to?(:c)}”

begin  
klass.class\_eval do  
alias d b  
end  
rescue  
p “class\_eval : #{$!}”  
end  
end

p “A::B : #{A::B.respond\_to?(:b)}”  
included(A::B)  
moulon%

moulon% ./b.rb  
“A::B : true”  
“instance\_eval : true”  
“class\_eval : undefined method `b' for class`A::B’”  
moulon%

Guy Decoux
