像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
这不是凤凰应用程序。
答案 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