Wie initialisiert man 'attr_accessor' Attributwerte? [Duplikat]

7

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!

    
Backo 16.08.2011, 16:22
quelle

4 Antworten

6

Für Rails 3.2 oder früher können Sie attr_accessor_with_default verwenden:

%Vor%

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:

%Vor%     
Steve 17.08.2011, 18:12
quelle
11

Hast du es versucht:

%Vor%     
apneadiving 16.08.2011 16:26
quelle
3

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,

%Vor%

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)

    
Mon ouïe 16.08.2011 18:36
quelle