Czy mógłbyś szczegółowo wyjaśnić, czym są wywołania zwrotne :before_save
i :before_create
Ruby on Rails i co mają wspólnego z sprawdzaniem poprawności Rails? Czy sprawdzanie poprawności następuje po :before_save
czy :before_create
?
Czy mógłbyś szczegółowo wyjaśnić, czym są wywołania zwrotne :before_save
i :before_create
Ruby on Rails i co mają wspólnego z sprawdzaniem poprawności Rails? Czy sprawdzanie poprawności następuje po :before_save
czy :before_create
?
Odpowiedzi:
W operacji tworzenia w Railsach jest sześć wywołań zwrotnych przed operacją bazy danych i dwa po niej. W kolejności są to:
before_validation
before_validation_on_create
after_validation
after_validation_on_create
before_save
before_create
after_create
after_save
Operacje aktualizacji mają dokładnie ten sam zestaw, z wyjątkiem odczytu update
zamiast create
wszędzie (i UPDATE zamiast INSERT ).
Z tego widać, że walidacja jest przeprowadzane przed before_save
i before_create
wywołania zwrotne.
before_save
Występuje nieznacznie przed before_create
. Według mojej najlepszej wiedzy między nimi nic się nie dzieje; ale before_save
będzie też strzelał podczas operacji Aktualizacji, podczas gdy before_create
będzie strzelał tylko dla Creates.
after_save
lub after_create
?
after_save
lub after_create
callback, self
to zapis, który właśnie został zapisany, ponieważ istnieje po zapisaniu. Że zawiera wygenerowany automatycznie dziedzinach jak id
, created_at
, updated_at
.
before_create
odnosi się do nowego obiektu zapisywanego w bazie danych, a nie do create
wywoływanej metody. W ten sposób before_create
można nadal zwolnić nawet z save
metody.
before_save
3. i before_create
5. pozycję.
before_save
jest wywoływany za każdym razem, gdy obiekt jest zapisywany. Tak dla nowych i istniejących obiektów. (utwórz i zaktualizuj akcję)
before_create
tylko przed stworzeniem. Więc tylko dla nowych obiektów (utwórz akcję)
before_create
vs before_save :on => :create
Czasami musisz uważać na kolejność oddzwaniania
Zobacz tutaj po więcej szczegółów:
http://pivotallabs.com/activerecord-callbacks-autosave-before-this-and-that-etc/
before_save :on => :create
nie działa (przynajmniej na torach 3.2)
before_save :generate_api_key, :if => :new_record?
before_validation_on_create
iafter_validation_on_create
są usuwane od wersji 3 , zamiast tego użyjbefore_validation
iafter_validation
odpowiednio z opcją:on => :create
.