2013-12-12 18 views
23

Ich sehe gelegentlich im Modellcode Attribute Accessoren/Leser/Schreiber. Sind diese notwendig, wenn ich Attribute aus dem View/Controller-Code aktualisieren möchte?Warum ist attr_accessor in Rails erforderlich?

Ich bin ein Anfänger, also rede ich wirklich über grundlegende Anwendungen.

Antwort

52

attr_accessor ist eine Kernfunktion von Ruby und wird zum Generieren von Instanzvariablen mit Getter- und Setter-Methoden verwendet. Seine Verwendung wird im Basis-Ruby nie benötigt (es ist eine Bequemlichkeit).

Bei ActiveRecord-Modellen werden Getter und Setter bereits von ActiveRecord für Ihre Datenspalten generiert. attr_accessor ist nicht erforderlich oder wünschenswert.

Wenn Sie zusätzliche Instanzdaten haben, die Sie nicht beibehalten müssen (d. H. Es handelt sich nicht um eine Datenbankspalte), können Sie attr_accessor verwenden, um sich ein paar Zeilen Code zu sparen.

Die ähnlich benannte attr_accessible - die häufig in Rails-Code angezeigt wird und mit attr_accessor verwechselt wird - ist eine veraltete Methode zum Steuern der Massenzuweisung in ActiveRecord-Modellen. Rails 4 unterstützt es nicht aus der Box; Es wurde durch Strong Parameters ersetzt, was eine genauere Kontrolle ermöglicht.

24

Wenn Sie eine attr_accessor deklarieren, können Sie sie als virtual attribute verwenden, was im Grunde ein Attribut des Modells ist, das nicht in der Datenbank gespeichert wird.

Beispiel: Sie deklarieren attr_accessor :password in Ihrem User Modell, so dass Sie es als ein Feld in einem neuen Benutzerformular verwenden können. Wenn Sie ihr Kennwort in der entsprechenden Aktion create erhalten, können Sie eine hashed_password ableiten, diese in der Datenbank beibehalten und die angegebene password verwerfen (was am Ende der Anforderung automatisch erfolgt).

3

Im Allgemeinen ist es eine ziemlich gute Idee, attr_accessor für alles auf einem Modell zu dekorieren, das keine tatsächliche Spalte in der SQL-Tabelle ist. Schienen 4 oder nicht. Dadurch erhalten Sie ein klares Verständnis davon, was im Modell enthalten ist und was beibehalten wird.

Verwandte Themen