Strange behavior of alias_method_chains

Greetings.

I've got very strange behavior of alias_method_chains, and I hope someone will advise me.

I have a rails 2.2.2 app created with #rails aliasApp

, a class XYZ residing in app/helpers/xyz.rb:

<code> class XYZ

  attr_accessor :name   attr_accessor :value

  def initialize (a, b)     puts "in XYZ constructor"     self.name = a     self.value = b   end

  def a     puts self.name   end

  def b     puts self.value   end end </code>

, and an extended class XYZ in app/views/xyz_ext.rb

<code> class XYZ    def initialize_with_extension a,b       puts "before chain"       initialize_without_extension a,b       puts "after chain"    end    alias_method_chain :initialize, :extension end </code>

So basically what I expect to have three lines in the console when creating XYZ: 1) before chain 2) in Alias constructor 3) after chain

BUT I get something really different!

silencio:alias u2$ script/console Loading development environment (Rails 2.2.2)

require 'app/views/xyz_ext.rb'

=> ["XYZ"]

XYZ.new 1,3

before chain ArgumentError: wrong number of arguments (2 for 0) from ./app/views/xyz_ext.rb:4:in `initialize_without_extension' from ./app/views/xyz_ext.rb:4:in `initialize' from (irb):3:in `new' from (irb):3

Any ideas on this error would be very appreciated! Alex

The problem here is that the "normal" XYZ in xyz.rb is never loaded so
you're trying to call Object's initialize, which does not take 2
arguments

Fred

Fred,

I really appreciate your help. The following works like a charm.

silencio:alias u2$ script/console Loading development environment (Rails 2.2.2)

require 'app/helpers/alias.rb'

=> ["XYZ"]

require 'app/views/alias_ext.rb'

=>

XYZ.new 1,2

before chain in Alias constructor after chain => #<XYZ:0x259c73c @value=2, @name=1>

But having this in mind, how do I ensure that my 'app/helpers/alias.rb' is loaded BEFORE any extended classes? Sorry if this a really newbie question..

Alex

Frederick Cheung wrote:

Require it explicitly from the extension file ?

Thanks again!

Frederick Cheung wrote: