与elixir中的其他函数(以及Ecto自己的事务)一样,我想模式匹配以处理Ecto查询的潜在错误。像这样:
case Repo.get!(User, id) do
{:ok, user} ->
#do something
{:error, message} ->
#pass the error
end
显然这不起作用,但我如何模式匹配Ecto错误,如Ecto.NotSingleResult和其他潜在的查询问题,如预加载错误?
答案 0 :(得分:2)
使用Repo.get
将返回值或nil。然后,您可以在预期的结构上进行模式匹配或使用if子句。 Repo.get!
故意提出(对于你希望结构存在的情况并且不存在错误)。
答案 1 :(得分:0)
嘿,我对elixir有点新意,但我认为你可以在这里使用护卫条款
case Repo.get!(User, id) do
{:ok, user} ->
#do something
{:error, message} when :error === Ecto.NotSingleResult ->
#pass the error
end
答案 2 :(得分:0)
这可能会成功
case Repo.get(User, id) do
user when is_map(user) -> {:ok, user}
nil -> {:error, "not found"}
end
对此Elixir, Ecto pattern matching conditional with db query not behaving as expected
的反应