Ich verwende Ruby on Rails 3.0.9 und möchte einige attr_accessor
Attributwerte in meiner Klasse \ model initialisieren, die von ActiveRecord::Base
erbt. Das heißt,
... in meinem Modul habe ich:
%Vor% und Ich möchte auf true
all attr_accessor
Attributwerte setzen. Wie kann ich das tun?
PS: Natürlich würde ich gerne die obige Frage lösen, die sich "à la Ruby on Rails Way" nähert. Ich kenne den after_initialize
Callback, aber mit dieser Methode sollte ich jede attribute_name<N>
Anweisung wiederholen, für die ich den Wert auf true
innerhalb dieser after_initialize
Anweisung setzen möchte (... und das ist ) nicht TROCKEN - Wiederhole dich nicht selbst). Vielleicht gibt es einen besseren Weg, dies zu erreichen. Gibt es eine Möglichkeit, attr_accessor
Attributwerte "on the fly" zu setzen, wenn Sie diese Attribute angeben? Das heißt, ich möchte attr_accessor
-Attribute gleichzeitig deklarieren und setzen!
Für Rails 3.2 oder früher können Sie attr_accessor_with_default
verwenden:
Da Ihr Standardwert ein unveränderlicher Typ (boolean) ist, kann diese Form der Methode hier sicher verwendet werden. Verwenden Sie sie jedoch nicht, wenn der Standardwert ein veränderbares Objekt ist, einschließlich eines Arrays oder einer Zeichenfolge, da alle Ihre neuen Modellobjekte dieselbe Instanz verwenden, was wahrscheinlich nicht Ihren Vorstellungen entspricht.
Stattdessen akzeptiert attr_accessor_with_default
einen Block, in dem Sie jedes Mal eine neue Instanz zurückgeben können:
Ich würde nur einen Getter definieren, der den Wert, an dem Sie interessiert sind, langsam lädt und attr_writer
verwendet, um den Setter zu definieren. Zum Beispiel,
Was, wenn Sie es wirklich meinen, kann mit einer Meta-Programmierung umgeschrieben werden:
%Vor%Dies funktioniert, weil die Berechnung des Standardwerts normalerweise keine Nebeneffekte hat, so dass die Reihenfolge wichtig ist und der Wert erst berechnet werden muss, wenn Sie versuchen, auf den Wert zuzugreifen.
(Câlin ist meine Katze; ihm geht es gut und er hat immer noch die vier seiner Füße)
Brutale Lösung
%Vor%oder etwas konzeptueller: Ruby: attr_accessor generierte Methoden - Wie man sie (in to_s - benutzerdefiniertes Format) iteriert?
Tags und Links ruby ruby-on-rails-3 attributes ruby-on-rails initialization