我在API中使用以下控制器,它使用Phoenix。
defmodule TattooBackend.Web.API.V1.StudioController do
use TattooBackend.Web, :controller
alias TattooBackend.Accounts.Studio
def show(conn, %{"id" => id}) do
studio = Repo.get!(Studio, id)
render conn, studio: studio
end
end
我的目标是全局拯救Ecto.NoResultsError并呈现一些错误消息。我可以将其重写为以下格式:
def show(conn,%{"id" => id}) do
case Repo.get(Studio, id) do
nil -> # return null and 404
record -> # do something with record
end
end
但我想避免在其他控制器中重复此模式。我该如何解决这个问题?
答案 0 :(得分:0)
可以将Ecto.NoResultsError
的自定义错误声明为described here:
defimpl Plug.Exception, for: Ecto.NoResultsError do def status(_exception), do: 404 end
根据文档中的规定,Phoenix为Ecto.NoResultsError
提供default implementation,您想要的应该是开箱即用的。