UPDATEJak korzystać z funkcji "after_initialize" w Rails 3?
ja błędnie sprawdził podręcznik edgerails zamiast obecnie poprawnych Rails 3 prowadzących (która nie ma wzmianki o after_initialize). Nie wiem, dlaczego przewodnik Edgerails jest "niepoprawny" - myślałem, że przewodnik po edgerachach powinien być najnowszym, aktualnym przewodnikiem?
Pozostawię to pytanie tak, jak na wypadek, gdyby ktoś szukał tego samego "problemu".
Wywołanie w stylu makro do after_initialize
jest drogą do zrobienia.
Gdyby after_initialize
być używany jako metoda lub makro stylu rozmowy?
To działa, ale daje ostrzeżenie Deprecation:
def after_initialize
logger.info "Called after_initialize"
end
Wycofanie UWAGA: Podstawa # after_initialize została zaniechana, skorzystaj Base.after_initialize: zamiast metody.
To działa, i nie ma ostrzeżenia:
after_initialize :do_this_after_initialize
def do_this_after_initialize
logger.info "Called after_initialize"
end
Ale Active Record Walidacje i oddzwaniania przewodnik w 10.4 after_initialize and after_find mówi:
... Jeśli próbujesz zarejestrować after_initialize lub after_find przy użyciu metod klasy makr w stylu , będą po prostu zignorowane. Takie zachowanie jest ze względów wydajności, ponieważ after_initialize i after_find będzie zarówno miano dla każdego rekordu znaleźć w bazie danych, co znacznie spowalnia dół zapytań ...
Więc to oznacza, że w makro- użycie stylu jest nieefektywne w porównaniu do metody stylu?
(Chyba przewodnik jest źle, „cos kod jest królem: D)
Kolejna aktualizacja
commit here od 28 stycznia 2011 roku, sugeruje, że w prawidłowy sposób nadal używać wywołania w stylu makro, a nie def after_initialize
.
Używam after_initialize na przykład do domów, położona skojarzeń. Przykład after_initialize: build_text,: unless =>: text. Bardzo pomocne przy korzystaniu z accepts_nested_attributes_for –
Tutaj jest zaktualizowany link [do przewodnika Rails 4 o after_initialize] (http://guides.rubyonrails.org/active_record_callbacks.html#after-initialize-and-after-find) – stereoscott