ich hab letztens einen ganz netten artikel gelesen, der sich auch mit dieser "magic" beschäftigt:
http://yehudakatz.com/2010/02/15/abstractqueryfactoryfactories-and-alias_method_chain-the-ruby-way/ Am 25.02.2010 um 20:34 schrieb Thomas Baustert: > > Hi Micha > > In Ruby schreibst du z.B.: > > alias_method :foo_without_feature, :foo > alias_method :foo, :foo_with_feature > > Dann wird die Methode foo in foo_without_feature kopiert und danach wird > foo_with_feature in foo kopiert. > > Wenn du jetzt foo aufrufst, wird nicht mehr die Originalmethode foo, sondern > foo_with_feature aufgerufen. > Um an die Originalmethode foo zu gelanden, rufst du foo_without_feature auf. > > alias_method_chain ist ein Rails-spezifische Methode, die beide Aufrufe oben > zu einem kürzt: > > alias_method_chain :foo, :feature > > Auf diese Weise kannst du mit dem Aufruf foo eine Kette von Methoden > aufrufen, z.B. > > a.foo: foo_with_feature1 => foo_with_feature2 => foo_with_feature3 => > foo_without_feature (ehem foo) > > Du musst dazu nicht die Stellen im Code ändern, an denen foo aufgerufen wird > und kannst trotzdem neues Verhalten einführen. > Aber Vorsicht, it's magic! :) > > In deinem Beispiel wird es genutzt, um die Parameter und Optionen von > error_messages_for zu verändern. > Wenn jemand error_messages_for aufruft, wird erst > error_messages_for_with_message_overrides aufgerufen. > > Siehe auch http://api.rubyonrails.org/. > Methode ist u.a. dort beschrieben. > > Hoffe, es hilft. > > Grüße, > Thomas > > > > > Am 25.02.2010 um 19:24 schrieb Micha: > >> Hallo Rubyisten, >> >> ich arbeite mich seit längerem langsam und beständig in die Eingeweiden der >> Ruby Scriptsprache und dem ROR Framework vor. Nun hänge ich gerade bei >> alias_method_chain Methode. Dummerweise kann ich die Logik dahinter >> irgendwie nicht nachvollziehen. >> >> Beispiel: >> >> module ActionView >> module Helpers >> module ActiveRecordHelper >> >> def error_messages_for_with_message_overrides(*params) >> options = params.extract_options!.symbolize_keys >> options[:header_message] = nil unless options.include? >> (:header_message) >> options[:class]? options[:class] += ' error' : options[:class] = >> 'error' >> options[:message] = nil unless options.include?(:message) >> error_messages_for_without_message_overrides(params, options) >> end >> >> alias_method_chain :error_messages_for, :message_overrides >> end >> end >> end >> >> Was passiert hier? Es wird die Methode error_messages_for unter dem Kontext >> einer anderen Methode message_overrides bzw. in Verbindung beider >> überschrieben? >> >> Es ist wahrscheinlich ganz einfach - kann mir jemand eine kleine >> Einstiegshilfe geben? >> >> Vielen Dank! >> Micha >> >> _______________________________________________ >> rubyonrails-ug mailing list >> rubyonrails-ug@headflash.com >> http://mailman.headflash.com/listinfo/rubyonrails-ug >> > > --- > Thomas Baustert - Freiberuflicher Softwareentwickler > Averhoffstraße 10, 22085 Hamburg > +49(0)173-2391143 - busin...@thomasbaustert.de > USt-IdNr.: DE814405137 > > > > > > > > > > > _______________________________________________ > rubyonrails-ug mailing list > rubyonrails-ug@headflash.com > http://mailman.headflash.com/listinfo/rubyonrails-ug _______________________________________________ rubyonrails-ug mailing list rubyonrails-ug@headflash.com http://mailman.headflash.com/listinfo/rubyonrails-ug