Phoenix Framework Callbacks

8

Verwendet Phoenix Framework irgendwelche Callback-Filter, wie sie in Rails zu finden sind? Ich weiß, dass es möglich ist, Changesets zu validieren, aber ich suche nach Möglichkeiten, um Aktionen wie before_create , before_save und after_commit zu implementieren.

    
wohlert 27.04.2015, 20:30
quelle

2 Antworten

13

Ecto tut: Ссылка

Sie unterscheiden sich deutlich von den Rails: Sie erhalten Changesets und müssen diese zurückgeben und müssen für die Datenkonsistenz verwendet werden (verwenden Sie sie nicht zum Senden von E-Mails und was nicht).

    
José Valim 27.04.2015, 20:54
quelle
11

Ab Ecto 2.0 wurden Callbacks vollständig entfernt.

So, wie jetzt Rückrufe zu behandeln ?. Hier sind zwei Möglichkeiten

Für before_ Callbacks können Sie Changeset selbst verwenden. Einer der Gründe, warum Callbacks entfernt wurden, war, dass viele Entwickler in vielen Fällen auf Callbacks angewiesen waren, in denen Changesets ausreichen würden . Wenden Sie einfach die gewünschte Funktion auf Ihren Änderungssatz an,

%Vor%

Eine andere Möglichkeit besteht darin, mehrere Repo-Operationen mit Ecto.Multi zu gruppieren. Aus den Dokumenten

  

Ecto.Multi ermöglicht das Packen von Operationen, die zusammen ausgeführt werden sollen (in einer einzigen Datenbanktransaktion), und bietet eine Möglichkeit, die Vorgänge in der Warteschlange zu inspizieren, ohne sie tatsächlich auszuführen. Jede Operation erhält einen eindeutigen Namen und identifiziert das Ergebnis oder hilft, den Fehlerort zu identifizieren, falls dieser auftritt.   Wenn Sie also eine Gruppe von datenbezogenen Vorgängen gleichzeitig ausführen möchten, können Sie Multi verwenden. Sowohl before_ als auch after_ Rückrufe können hier ersetzt werden.

Ein Beispiel wäre

%Vor%

Führen Sie es mit

aus %Vor%

Sie müssen daran denken, dass Sie datenbezogene Abfragen ausführen müssen und keine anderen Aufgaben wie das Senden einer E-Mail ausführen müssen. Dazu können Sie einfach eine Musteranpassung für das Ergebnis durchführen und die entsprechende Aktion ausführen. Lets sat Sie wollten eine Mail senden, wenn die Transaktion erfolgreich war und eine Fehlermeldung angezeigt wird, falls nicht

%Vor%

Quelle:

coderVishal 26.06.2016 14:44
quelle

Tags und Links