Podobnie jak inne funkcje w eliksiru (jak również własne transakcje Ecto), chcę dopasować wzorce do obsługi potencjalnych błędów za pomocą zapytań Ecto. Tak:Jak dopasować wzór Ecto błąd zapytania
case Repo.get!(User, id) do
{:ok, user} ->
#do something
{:error, message} ->
#pass the error
end
Oczywiście to nie działa, ale jak mogę wzór błędy mecz ekto jak Ecto.NotSingleResult i innych potencjalnych problemów, takich jak zapytania błędów wstępnego obciążenia?
Tak, jak to teraz robię, po prostu zastanawiałem się, dlaczego Ecto nie zwrócił krotki, jak wiele innych rzeczy. Odpowiedź tupot to naprawdę dobry sposób na poradzenie sobie z błędami i przepływem. –
Eliksir rzeczywiście ma oba. Zwykle używamy krotki, gdy istnieją różne powody błędu (jak w funkcjach modułu Pliku). Tutaj jednak jedynym powodem błędu jest brak wartości, która jest właściwie wyrażona zerem. –
Dodatkowym powodem błędu w zapytaniach Eo jest, gdy funkcja oczekuje najwyżej jednego wyniku, ale zamiast tego wiele wyników jest wyodrębnianych przez zapytanie. Mamy więc dwa różne powody błędu i dwa różne sposoby radzenia sobie z nimi: zero, gdy nie otrzymujemy żadnego wyniku, i wyjątek, gdy otrzymujemy wiele wyników. Z krotkami łatwo i elegancko radzi sobie z tymi przypadkami, ponieważ możemy użyć instrukcji "case" lub "with", szczególnie gdy wiele zapytań Ecto jest połączonych ze sobą. – Guido