Czy dzwonek jest wywoływany za każdym razem, nawet jeśli sprawdzanie poprawności nie powiedzie się? Próbowałem kilka testów i wygląda na to, że tak!Czy hakowanie after_validation jest wywoływane za każdym razem w Active Record?
Odpowiedz
Masz rację, błąd sprawdzania poprawności nadal wyzwala wywołanie zwrotne after_validation. Jest to kolejność wywołań zwrotnych:
- before_validation
- after_validation
- before_save
- before_create
- after_create
- after_save
- after_commit
Również aby zrozumieć większy łańcuch zdarzeń: dokumentacja mówi, że wywołanie zwrotne "przed", które zwraca wartość false, zatrzyma łańcuch i zatrzyma akcję (zapisywanie, tworzenie, aktualizowanie itd.). Wywołanie "po", które zwraca wartość false, zatrzyma łańcuch wywołań zwrotnych, ale nie całą akcję.
"after_validation" to ostatnia rzecz do uruchomienia, jeśli walidacje się nie powiodą, a wszystko zostanie zatrzymane. Jeśli jednak przejdą, wszystko inne jest zawijane w transakcji bazy danych i wycofywane, jeśli coś pójdzie nie tak. Zatem twoje "before_create" może na przykład utworzyć obiekt potomny i zostanie bezpiecznie cofnięte, jeśli samo tworzenie obiektu się nie powiedzie.
- 1. Czy jądro/sched.c/context_switch() może być wywoływane za każdym razem, gdy proces jest włączony?
- 2. Rails User.joins.not (...) w Active Record?
- 3. Yii2 podzapytanie w Active Record
- 4. Gniazdo jest wywoływane wiele razy za każdym razem, gdy emitowany jest sygnał.
- 5. Czy konieczne jest tworzenie klasy Java za każdym razem?
- 6. Czy [hash NSString] obliczane jest za każdym razem?
- 7. AngularJS: potrzeba wywoływania zdarzenia za każdym razem, gdy wywoływane jest wywołanie ajax
- 8. Concat in Active Record Codeigniter
- 9. Przełęcz tablica, gdzie w CodeIgniter Active Record
- 10. Pulsuj szablon za każdym razem, gdy jest renderowany w Meteoru
- 11. requestAccessToEntityType - raz lub za każdym razem?
- 12. x-ua za każdym razem nie działa
- 13. Wiele skrótów: za każdym razem dodawaj sól?
- 14. Julia kompiluje scenariusz za każdym razem?
- 15. Czy RoleEnvironment.GetConfigurationSettingValue czyta za każdym razem z pliku cfg?
- 16. glVertexAttribPointer potrzebny za każdym razem, gdy wywoływany jest glBindBuffer?
- 17. Kod modułu ES6 wykonywany za każdym razem, gdy jest importowany
- 18. Dodawanie warunku wyszukiwania do wszystkich modeli Active Record w Railsach
- 19. Usuń obiekt z usługi Active Record Array
- 20. Jaka jest różnica między wezwaniami: before_save i: before_update Active Record?
- 21. Czy za każdym razem, po rozpoczęciu Invinvoke, musi nastąpić EndInvoke?
- 22. Szyny Heroku - Wyłącz Active Record Połączenie Postgresowe
- 23. Active Record Delete nie działa prawidłowo
- 24. Ruby on Rails Active Query Record
- 25. Czy muszę zadzwonić getWritableDatabase() za każdym razem manipulowanie danymi
- 26. Czy canvas.getContext ("2d") zwraca za każdym razem tę samą instancję?
- 27. Funkcja Chrome Prerender jest anulowana za każdym razem
- 28. Statechange jest uruchamiane za każdym razem, gdy robię stan push
- 29. Czy dostęp do dynamicznego Active Record Store jest oparty na formularzu użytkownika?
- 30. Powracaj różne wartości za każdym razem, gdy oczekiwane jest jMockit
Dziękuję! Twoje przybite to. Tak więc, jeśli after_validation zwróci wartość false, czy wycofa transakcję? – rafamvc
Nie ma za co! Jeśli argument after_validation zwróci wartość false, zatrzyma on wszelkie wcześniejsze wywołania zwrotne, ale nie zatrzyma samej transakcji. Jest tak prawdopodobnie dlatego, że callbacks "before" mają na celu sprawdzenie potencjalnych problemów, callback "after" ma na celu wykonanie zadań po stronie, które należy wykonać po pomyślnym wykonaniu kroku. Na przykład możesz użyć before_validation, aby ustawić domyślne dla atrybutu, a jeśli to się nie powiedzie, chcesz zatrzymać cały proces. Możesz użyć parametru after_validation, aby zaktualizować licznik "failed_create", jeśli wystąpią jakiekolwiek błędy. –
@rafamvc, jeśli to jest poprawna odpowiedź, dlaczego zaakceptowałeś drugą? – Mischa