Set-Methoden (setter) eines Active Record-Objekts überschreiben (override)

ActiveRecord, der Objekt-relationale-Mapper, der im Web-Framework Ruby on Rails zum Einsatz kommt, ist ein flexibel und leicht zu bedienen.

Wie jede komplexe Bibliothek hat aber auch diese eine Reihe nicht intuitiver Aspekte. Ein solcher Aspekt ist die Methode, wie man die von ActiveRecord zur Laufzeit hinzugefügten get- und set-Methoden der Modelle (models) überschreiben kann.

Hier ein Code-Beispiel:

class Bill < ActiveRecord::Base
belongs_to :customer

#[...]

def customer=(my_customer)

write_attribute(:customer, my_customer)

# [...] weiterführende Verarbeitung

end

end

class Customer < ActiveRecord::Base

has_many :bills

end

Der Trick besteht im Wesentlichen aus zwei Kniffen.

Zum einen verhindern wir den Namenskonflikt durch die Verwendung des my_customer Parameters und zum Anderen verwenden wir write_attribute für das Setzen der customer-Variable. Letzteres verhindert eine endlose rekursion der customer=-Methode.

Kommentarfunktion ist deaktiviert