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?

Author: Ajedi32, 2011-06-06

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:

  1. before_validation
  2. before_validation_on_create
  3. after_validation
  4. after_validation_on_create
  5. before_save
  6. before_create

    DATABASE INSERT
  7. after_create
  8. 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.

 339
Author: Chowlett,
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ę)

 124
Author: Michael Koper,
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 /

 2
Author: 23inhouse,
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