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 -~----------~----~----~----~------~----~------~--~---