Ruby on Rails Callback, jaka jest różnica między:before save i: before create?
Czy mógłbyś szczegółowo wyjaśnić czym są wywołania zwrotne Ruby on Rails i co mają wspólnego z walidacjami Rails? Czy Walidacja występuje po :before_save
LUB :before_create
?
3 answers
W operacji create pod Rails, 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
DATABASE INSERT after_create
after_save
Operacje aktualizacji mają dokładnie ten sam zestaw, z wyjątkiem odczytu update
zamiast create
everywhere (I UPDATE zamiast INSERT ).
Z tego widać, że Walidacja jest przeprowadzana przed wywołaniami zwrotnymi before_save
i before_create
.
before_save
występuje nieco przed before_create
. Z tego, co wiem, nic się między nimi nie dzieje, ale before_save
będzie strzelał również przy operacjach aktualizacji, podczas gdy {[5] } będzie strzelał tylko przy tworzeniu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-16 05:37:32
before_save
jest wywoływana za każdym razem, gdy obiekt jest zapisywany. Więc dla nowych i istniejących obiektów. (Utwórz i zaktualizuj działanie)
before_create
tylko przed stworzeniem. Więc tylko dla nowych obiektów (Utwórz akcję)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-21 01:00:57
before_create
vs before_save :on => :create
Czasami trzeba uważać na kolejność wywołań zwrotnych
Więcej szczegółów znajdziesz tutaj:
http://pivotallabs.com/activerecord-callbacks-autosave-before-this-and-that-etc /
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-06 11:03:16