如何在Ecto / Elixir中优雅地显示错误?

时间:2017-10-27 04:41:25

标签: elixir ecto

Repo.get!(User, 10)

这样的东西

带来如下结果:

(Ecto.NoResultsError) expected at least one result but got none in query:

from u in Db.User,
  where: u.id == ^10

    (ecto) lib/ecto/repo/queryable.ex:80: Ecto.Repo.Queryable.one!/4

如何优雅地返回{:error, "No Record found"}

之类的内容

我可以使用try do块但是在Elixir中它是不受欢迎的。或者我可以使用递归函数方法

我认为这样的事情(虽然不起作用,只是一个概念):

def find_user(id) do
  case res = Repo.get!(User, id) do
     Ecto.NoResultsError -> {:error, "not found"}
     _ -> {:ok, res}
   end
end

这不是凤凰应用程序。

2 个答案:

答案 0 :(得分:2)

虽然@JayJun的答案非常有效,但[可以说]更具惯用性的方法是实现一个帮手,有两个不同的条款:

defp gracefully_handle_get(nil), do: {:error, :not_found}
defp gracefully_handle_get(user), do: {:ok, user}

并以这种方式使用:

User
|> Repo.get(id)
|> gracefully_handle_get()

答案 1 :(得分:1)

使用Repo.get/2并检查# ssh -v -i MyEc2KeyPair2.pem ec2-user@54.146.40.216 OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013 debug1: Connecting to 54.146.40.216 [54.146.40.216] port 22. debug1: connect to address 54.146.40.216 port 22: Connection timed out ssh: connect to host 54.146.40.216 port 22: Connection timed out

nil
相关问题