Wie andere Funktionen in Elixier (sowie Ectos eigenen Transaktionen), möchte ich Muster zu behandeln, um mögliche Fehler mit Ecto-Abfragen zu behandeln. Wie folgt aus:Wie Muster Match Ecto Query Fehler
case Repo.get!(User, id) do
{:ok, user} ->
#do something
{:error, message} ->
#pass the error
end
Offensichtlich funktioniert das nicht, aber wie kann ich Muster Spiel Ecto Fehler wie Ecto.NotSingleResult und andere mögliche Abfrage Probleme wie Vorbelastung Fehler?
Ja, das ist irgendwie so, wie ich es jetzt mache, ich habe mich nur gewundert, warum Ecto kein Tupel zurückgegeben hat wie viele andere Dinge. Die Tupel-Antwort ist eine wirklich nette Art, mit Fehlern und Flows umzugehen. –
Elixier hat tatsächlich beides. Wir verwenden das Tupel normalerweise, wenn es verschiedene Gründe für Fehler gibt (wie in den Funktionen im Dateimodul). Hier ist jedoch der einzige Grund für den Fehler das Fehlen eines Wertes, der richtig mit Null ausgedrückt wird. –
Ein weiterer Grund für einen Fehler in Ecto-Abfragen ist, wenn die Funktion höchstens ein Ergebnis erwartet, sondern mehrere Ergebnisse von der Abfrage extrahiert werden. Wir haben also zwei verschiedene Gründe für einen Fehler und zwei verschiedene Arten, sie zu behandeln: null, wenn wir überhaupt kein Ergebnis erhalten, und eine Ausnahme, wenn wir mehrere Ergebnisse erhalten. Mit Tupeln wäre es einfach und elegant, diese Fälle zu behandeln, da wir die "case" - oder "with" -Anweisungen verwenden könnten, insbesondere wenn mehrere Ecto-Abfragen miteinander verkettet sind. – Guido