2013-12-12 15 views
23

Od czasu do czasu widzę atrybut accessors/readers/writers w kodzie dla modeli. Czy są to niezbędne, jeśli chcę mieć możliwość aktualizowania atrybutów z kodu widoku/kontrolera?Dlaczego atr_accessor jest potrzebny w Railsach?

Jestem początkujący, więc naprawdę mówię o podstawowych aplikacjach.

Odpowiedz

52

attr_accessor jest podstawową cechą Rubiego i służy do generowania zmiennych instancji metodami getter i setter. Jego użycie nigdy nie jest wymagane w podstawowej Ruby (to udogodnienie).

W przypadku modeli ActiveRecord, pobierające i ustawiające są już generowane przez ActiveRecord dla kolumn danych. attr_accessor nie jest potrzebny ani pożądany.

Jeśli masz dodatkowe dane o instancjach, które nie muszą być trwałe (tzn. Nie jest to kolumna bazy danych), możesz użyć numeru attr_accessor, aby zapisać kilka wierszy kodu.

Podobnie nazwany - który jest często widziany w kodzie Rails i mylony z attr_accessor - jest przestarzałą metodą kontroli przypisania masy w modelach ActiveRecord. Railsy 4 nie wspierają go po wyjęciu z pudełka; został zastąpiony przez silne parametry, co umożliwia bardziej szczegółową kontrolę.

24

Jeśli zadeklarujesz numer attr_accessor, możesz go użyć jako virtual attribute, który jest w zasadzie atrybutem modelu, który nie jest przechowywany w bazie danych.

Przykładowy przypadek: użytkownik deklaruje attr_accessor :password w swoim modelu User, aby można go było użyć jako pola w nowym formularzu użytkownika. Po otrzymaniu hasła w odpowiedniej akcji create można wyprowadzić hashed_password, zachować go w bazie danych i odrzucić podaną password (która jest wykonywana automatycznie na końcu żądania).

3

Generalnie jest całkiem niezły pomysł, aby ozdobić attr_accessor dla czegokolwiek na modelu, który nie jest rzeczywistą kolumną w tabeli SQL. Szyny 4 lub nie. Daje to jasne zrozumienie tego, co jest w modelu i co jest trwałe.

Powiązane problemy