如何模式匹配Ecto查询错误

Dan*_*_es 7 elixir ecto

像elixir中的其他函数(以及Ecto自己的事务),我想模式匹配以处理Ecto查询的潜在错误.像这样:

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

显然这不起作用,但我如何模式匹配Ecto错误,如Ecto.NotSingleResult和其他潜在的查询问题,如预加载错误?

Jos*_*lim 2

使用Repo.getwhich 将返回一个值或nil。然后,您可以对预期结构进行模式匹配或使用 if 子句。Repo.get!故意引发(对于您期望结构存在而不存在的情况,则会出现错误)。

  • 是的,这就是我现在正在做的事情,我只是想知道为什么 Ecto 没有像许多其他东西一样返回元组。元组响应是处理错误和流程的一种非常好的方法。 (2认同)