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

Antwort per Email an