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 > [email protected] > http://mailman.headflash.com/listinfo/rubyonrails-ug > --- Thomas Baustert - Freiberuflicher Softwareentwickler Averhoffstraße 10, 22085 Hamburg +49(0)173-2391143 - [email protected] USt-IdNr.: DE814405137 _______________________________________________ rubyonrails-ug mailing list [email protected] http://mailman.headflash.com/listinfo/rubyonrails-ug
