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
?
źródło
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
?
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.
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
.after_save
lubafter_create
?after_save
lubafter_create
callback,self
to zapis, który właśnie został zapisany, ponieważ istnieje po zapisaniu. Że zawiera wygenerowany automatycznie dziedzinach jakid
,created_at
,updated_at
.before_create
odnosi się do nowego obiektu zapisywanego w bazie danych, a nie docreate
wywoływanej metody. W ten sposóbbefore_create
można nadal zwolnić nawet zsave
metody.before_save
3. ibefore_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ę)źródło
before_create
vsbefore_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/źródło
before_save :on => :create
nie działa (przynajmniej na torach 3.2)before_save :generate_api_key, :if => :new_record?