Aus der Rails-Anleitung
Rückrufe sind Methoden, die zu bestimmten Zeitpunkten während des Lebenszyklus eines Objekts aufgerufen werden. Mit Rückrufen können Sie Code schreiben, der immer ausgeführt wird, wenn ein Active Record-Objekt erstellt / gespeichert / aktualisiert / gelöscht / validiert / aus der Datenbank geladen usw. wird.
Active Record-Rückrufe generieren Ereignisse vor und nach dem Aktualisieren oder Löschen eines Active Record-Objekts, z. B. eines Modells, und dessen Status ändert sich. In diesem Fall kann jede Verarbeitung durchgeführt werden.
Beispiel) Geben Sie ein Protokoll aus, wenn Mitgliedsdaten gelöscht werden.
app/models/member.rb
class Member < ApplicationRecord
Abkürzung
after_destroy do
Rails.logger.info "Member is deleted: #{self.attributes}"
end
end
Die Verarbeitung in after_destroy
wird ausgeführt, wenn das Mitglied gelöscht wird.
Im Folgenden finden Sie einige Beispiele für Rückrufe, die in Active Record verfügbar sind. Before_ kann die Verarbeitung vor dem Trigger definieren, around_ kann die Verarbeitung vor und nach dem Trigger definieren und after_ kann die Verarbeitung nach dem Trigger definieren. Wenn es sich um before_validation handelt, erfolgt es vor dem Validierungsprozess, der durch Erstellen und Aktualisieren ausgeführt wird.
Rückrufpunkt | create | update | destroy |
---|---|---|---|
before_validation | ○ | ○ | × |
after_validation | ○ | ○ | × |
before_save | ○ | ○ | × |
around_save | ○ | ○ | × |
after_save | ○ | ○ | × |
before_create | ○ | × | × |
around_create | ○ | × | × |
after_create | ○ | × | × |
before_update | ○ | ○ | × |
around_update | ○ | ○ | × |
after_update | ○ | ○ | × |
before_destroy | × | × | ○ |
around_destroy | × | × | ○ |
after_destroy | × | × | ○ |
Während der Entwicklung wollte ich manchmal das Verhalten überprüfen, wenn der Löschvorgang fehlschlug, sodass ich es wie folgt zum Fehlschlagen bringen konnte.
app/models/member.rb
class Member < ApplicationRecord
Abkürzung
before_destroy { throw(:abort) }
end
Die Rückrufverarbeitung kann absichtlich gestoppt werden, indem "throw (: abort)" geschrieben wird.
Recommended Posts