2015-11-24 8 views
8

Różnica pomiędzy którymi after_create, after_save i after_commit w szynie jest to, że:Różnica między after_create, after_save i after_commit w szynach callbacków

  • after_save jest wywoływana, gdy obiekt jest tworzony i aktualizowany natomiast -
  • after_commit pożarów na Twórz, aktualizuj i niszcz.
  • Podczas after_create jest tylko podczas tworzenia obiektu

Jest to jedyna różnica między nimi lub istnieją inne istotne różnice?

+0

Nie powtarza się, gdzie jest after_commit w tym pytaniu? –

Odpowiedz

19

Prawie masz rację. Jednak jest jedna zasadnicza różnica między after_commit i after_create lub after_save tj

W przypadku after_create, to zawsze będzie przed wezwanie, aby zapisać (lub utworzyć) powraca.

Railsy opakowują każde zapisanie wewnątrz transakcji, a wywołania zwrotne create/after działają wewnątrz tej transakcji (w wyniku tego, jeśli wyjątek zostanie podniesiony w after_create, zapis zostanie wycofany). Z after_commit Twój kod nie działa, dopóki nie zostanie zatwierdzona zewnętrzna transakcja. Może to być szyna transakcji utworzona lub utworzona przez ciebie (na przykład, jeśli chcesz wprowadzić kilka zmian w pojedynczej transakcji). Oryginalnie opublikowane here

Oznacza to również, że jeśli after_commit podnosi wyjątek, transakcja nie zostanie wycofana.

+0

W przypadku after_create, zawsze będzie to przed wywołaniem zapisu (lub utworzenia) zwrotów. Nie jestem w stanie zrozumieć tego stwierdzenia. Czy ktoś może opisać innymi słowami? –

Powiązane problemy