Ein Beispiel für das, wovon ich spreche:
class Person < ActiveRecord::Base
def name=(name)
super(name.capitalize)
end
def name
super().downcase # not sure why you'd do this; this is just an example
end
end
Dies scheint zu funktionieren, aber ich habe gerade den Abschnitt über das Überschreiben von Attributmethoden in den ActiveRecord :: Base-Dokumenten gelesen und es wird vorgeschlagen, das read_attribute
und zu verwendenwrite_attribute
Methoden verwenden. Ich dachte, dass etwas mit dem, was ich im obigen Beispiel mache, nicht stimmt. Warum sollten sie diese Methoden andernfalls als "richtigen Weg" zum Überschreiben von Attributmethoden segnen? Sie erzwingen auch eine viel hässlichere Sprache, also muss es einen guten Grund geben ...
Meine eigentliche Frage: Stimmt etwas mit diesem Beispiel nicht?
quelle
Als Erweiterung der Antwort von Aaron Longwell können Sie auch eine "Hash-Notation" verwenden, um auf Attribute zuzugreifen, die Accessoren und Mutatoren überschrieben haben:
quelle
self.attribute
sprengt aber den Stack in 3.2.16.||=
für die Standardeinstellung unterstützt :def name; self[:name] ||= 'anon'; end
Zu diesem Thema finden Sie einige großartige Informationen unter http://errtheblog.com/posts/18-accessor-missing .
Das lange und kurze daran ist, dass ActiveRecord Superaufrufe für ActiveRecord-Attribut-Accessoren korrekt verarbeitet.
quelle
Ich habe ein Rails-Plugin, mit dem das Überschreiben von Attributen wie erwartet funktioniert. Sie finden es auf Github .
Installieren:
Benutzen:
Sobald Sie das getan haben, funktionieren die Dinge einfach:
quelle