Come altre funzioni in elixir (come pure le transazioni proprie di Ecto), voglio eseguire lo schema di corrispondenza per gestire potenziali errori con le query Ecto. Come questo:Come associare l'errore di query Ecto
case Repo.get!(User, id) do
{:ok, user} ->
#do something
{:error, message} ->
#pass the error
end
Ovviamente questo non funziona, ma come faccio a modello gli errori partita Ecto come Ecto.NotSingleResult e altri potenziali problemi di query come gli errori di precarico?
Sì, questo è il modo in cui lo sto facendo ora, mi stavo chiedendo perché Ecto non ha restituito una tupla come molte altre cose. La risposta alla tupla è un modo davvero carino per gestire gli errori e il flusso. –
L'elisir ha davvero entrambi. Solitamente utilizziamo la tupla quando ci sono diverse ragioni per l'errore (come nelle funzioni del modulo File). Qui, tuttavia, l'unica ragione di errore è l'assenza di un valore che è correttamente espresso con zero. –
Un ulteriore motivo per un errore nelle query Ecto è quando la funzione prevede al massimo un risultato, ma invece i risultati vengono estratti dalla query. Quindi abbiamo due diversi motivi per un errore e due diversi modi per gestirli: zero quando non si ottiene alcun risultato e un'eccezione quando si ottengono più risultati. Con le tuple sarebbe facile ed elegante gestire questi casi perché potremmo usare le istruzioni "case" o "con", specialmente quando più query Ecto sono concatenate. – Guido