I've just realised that because this is a dynamic finder the "power" of
method_missing is what's going to stop you from being able to alias this
method. This method appears to not be defined until method_missing catches
it and defines it then. I've tried also calling the method before aliasing
it (thereby defining it) but without much luck:

user.rb:

find_by_name(nil)

  class_eval do
    alias_method :old_find_by_name, :find_by_name
  end

NameError: undefined method `find_by_name' for class `User'

I'm really interested in how this would be done now.

2009/11/10 Hiro Protagonist <rampantduran...@gmail.com>

>
> Koz and Ryan,
>
> Now that you point it out, I see how #method_missing calls find, then
> find thinks I'm retarded and over writes my method by doing a class
> eval. Thus removing my original code.
>
> Am I figuring that right?
>
> I've always had trouble generating aliases to singleton methods.
>
> I seem to recall the following syntax doesn't work
> alias self.old_name self.new_name
>
> but I might be confusing trying
>
> alias old_name self.new_name
>
> Thank you for your insights,
> Chris Lundquist
>
>
>
> On Nov 9, 2:37 pm, Michael Koziarski <mich...@koziarski.com> wrote:
> > > May I suggest aliasing the method instead of trying to call super?
> > > alias_method :old_find_by_name, :find_by_name
> > > def Person.find_by_name(*params)
> > >   params.first.chop! if params.first.last == "."
> > >   old_find_by_name(params)
> > > end
> >
> > super won't work here because the method isn't defined on a parent of
> > Person, it's defined on person itself.  So what's happening is that
> > the call to method missing is generating a *new* implementation of
> > find_by_name which simply does the find, without your changes.
> >
> > We could fix this for rails 3.0 by moving those generated methods from
> > Person to a module included in person, but for 2.3 you'll have to do
> > as Ryan suggests and use aliasing, or just call
> > all(:conditions=>{:first_name=>params.first}) instead of super.
> >
> > --
> > Cheers
> >
> > Koz
> >
>


-- 
Ryan Bigg

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To post to this group, send email to rubyonrails-core@googlegroups.com
To unsubscribe from this group, send email to 
rubyonrails-core+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-core?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to