i’m using method_missing to implement a simple metaprogramming that
checks for account rights.
in Account << ActiveRecord::Base i defined:
def method_missing(m, a = {})
if m.to_s =~ /^has_right_(.*)$/
… calls another method passing $1 parameter
end
end
it seems to override some of the active record methods based on method
missing. in the console it seems to work ok so i got some problem in
debugging.
how can i call from Account#method_missing the
activeRecord::Base#method_missing ?
On 18 March 2010 10:23, eugenio [email protected] wrote:
i’m using method_missing to implement a simple metaprogramming that
checks for account rights.
it seems to override some of the active record methods based on method
missing. in the console it seems to work ok so i got some problem in
debugging.
This explains part of the problem:
http://ruby.tie-rack.org/6/safely-overriding-method_missing-in-a-class-that-already-has-it/
Calling to “super” should be part of your solution…
def method_missing(m, args, &block)
if m.to_s =~ /^has_right_(.)$/
… calls another method passing $1 parameter
else
super(m, *args, &block)
end
end
#i added this line:
alias_method :ar_method_missing, :method_missing
#and an else condition in my method_missing
def method_missing(m,a,&block)
if m.to_s =~ /^has_right_(.)$/
… calls another method passing $1 parameter
else
ar_method_missing(m,*a, &block)
end
end
it seems to work now.
On Thu, Mar 18, 2010 at 12:12 PM, eugenio [email protected]
wrote:
end
end
it seems to work now.
Please don’t do that.
This is ordinary object-oriented programming. If you override a method
and want to delegate to the parent just call super. That’s what super
is for. Aliasing is an inappropriate solution to this.