Wird after_validation
Hook jedes Mal aufgerufen, auch wenn die Validierung fehlgeschlagen ist? Ich habe ein paar Tests versucht und es scheint so!Wird der After_validation-Hook jedes Mal bei Active Record aufgerufen?
Antwort
Sie haben Recht, der Validierungsfehler löst immer noch den Callback nach_validation aus. Dies ist die Reihenfolge der Rückrufe:
- before_validation
- after_validation
- BEFORE_SAVE
- before_create
- after_create
- after_save
- after_commit
Auch Um die größere Kette von Ereignissen zu verstehen: Die Dokumentation besagt, dass ein "vorheriger" Callback, der false zurückgibt, die Kette stoppt und die Aktion stoppt (das Speichern, Erstellen, Aktualisieren usw.). Ein "nachher" -Rückruf, der false zurückgibt, stoppt die Kette von Rückrufen, aber nicht die gesamte Aktion.
"After_validation" ist das letzte, was ausgeführt wird, wenn Validierungen fehlschlagen und alles dort angehalten wird. Wenn sie übergeben werden, wird alles andere in eine Datenbanktransaktion eingeschlossen und zurückgesetzt, wenn etwas schief geht. So kann Ihr "before_create" beispielsweise ein untergeordnetes Objekt erstellen und es wird sicher rückgängig gemacht, wenn die Objekterstellung selbst fehlschlägt.
- 1. Broadcast-Empfänger wird nicht jedes Mal aufgerufen
- 2. IAuthorizationFilter wird nicht jedes Mal aufgerufen
- 3. Javascript Regular Expression nicht jedes anderes Mal aufgerufen wird
- 4. Rails Active Record Instanzvariablen
- 5. Active Record Associations - Schienen
- 6. Der Dialog wird jedes Mal angezeigt?
- 7. Active Record Query - Rails
- 8. CodeIgniter Active Record Sortierung
- 9. Rails Active Record Tabellenverknüpfungen
- 10. Schienen 5 Active Record has_and_belongs_to_many
- 11. Rails rund Active Record Abfrageergebnis
- 12. Active Record enthält mit STI
- 13. Einfache Railtie Erweiterung der Active Record
- 14. Wird Kernel/sched.c/context_switch() garantiert jedes Mal aufgerufen, wenn ein Prozess eingeschaltet wird?
- 15. Ruby Active Record IN-Klausel
- 16. attr_accessible in Schienen Active Record
- 17. Chrome Prerender-Funktion wird jedes Mal abgebrochen
- 18. Wird ConfigurationManager.AppSettings [Key] jedes Mal aus der Datei "web.config" gelesen?
- 19. Funktion innerhalb der Funktion - jedes Mal?
- 20. Rails 4 Active Record-Reihenfolge bei nachfolgenden Methodenaufrufen verloren
- 21. coderigniter active record link join
- 22. Join Tabelle Active Record Query
- 23. Rails 4 Active Record-Abfrage
- 24. Tabellenpräfix mit Castle Active Record
- 25. kann ich einen Anbieter erstellen, der jedes Mal ein neues Objekt zurückgibt, wenn get aufgerufen wird
- 26. Warum wird index_queryset jedes Mal aus der Suchansicht in django-Haystack aufgerufen?
- 27. Opting Active Record in CodeIgniter
- 28. Ereignissignal wird jedes Mal zweimal ausgegeben
- 29. Active Record-Abfrage auf will_paginate
- 30. Yii2 Unterabfrage in Active Record
Vielen Dank! Du hast es genagelt. Wenn also die after_validation den Wert false zurückgibt, wird die Transaktion zurückgesetzt? – rafamvc
Gern geschehen! Wenn After_validation den Wert false zurückgibt, werden alle weiteren Vorher/Nachher-Callbacks gestoppt, aber die Transaktion wird nicht gestoppt. Dies liegt wahrscheinlich daran, dass "vorher" -Rückrufe auf mögliche Probleme hin überprüft werden sollen, "nachher" -Rückrufe sollen alle Nebenaufgaben erfüllen, die nach dem erfolgreichen Abschluss eines Schritts ausgeführt werden müssen. Sie können beispielsweise before_validation verwenden, um den Standardwert für ein Attribut festzulegen. Wenn dies fehlschlägt, möchten Sie den gesamten Prozess stoppen. Und möglicherweise verwenden Sie after_validation, um einen "failed_create" -Zähler zu aktualisieren, wenn Fehler auftreten. –
@rafamvc, wenn das die richtige Antwort ist, warum hast du den anderen akzeptiert ?? – Mischa