Ecto.NoResultsError渲染json

时间:2017-06-26 13:59:59

标签: elixir phoenix-framework

我在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

但我想避免在其他控制器中重复此模式。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

可以将Ecto.NoResultsError的自定义错误声明为described here

defimpl Plug.Exception, for: Ecto.NoResultsError do
  def status(_exception), do: 404
end

根据文档中的规定,Phoenix为Ecto.NoResultsError提供default implementation,您想要的应该是开箱即用的。