7

Elixir の他の関数 (および Ecto 自身のトランザクション) と同様に、Ecto クエリで発生する可能性のあるエラーを処理するためにパターン マッチを使用したいと考えています。このような:

case Repo.get!(User, id) do
  {:ok, user} ->
    #do something
  {:error, message} ->
    #pass the error
end

明らかにこれは機能しませんが、Ecto.NotSingleResult のようなパターン マッチ Ecto エラーや、プリロード エラーのようなその他の潜在的なクエリの問題を解決するにはどうすればよいでしょうか?

4

3 に答える 3

2

Repo.get値または nil を返す which を使用します。次に、予想される構造体でパターン マッチを行うか、if 句を使用できます。Repo.get!意図的に発生させます (構造体が存在すると予想され、存在しない場合はエラーになります)。

于 2015-04-11T20:11:58.760 に答える
0

ねえ、私はエリクサーにちょっと慣れていませんが、ここでガード句を使用できると思います

case Repo.get!(User, id) do
  {:ok, user} ->
    #do something
  {:error, message} when :error === Ecto.NotSingleResult ->
    #pass the error
end
于 2015-04-11T17:42:38.180 に答える