2015-12-06 9 views
6

Phoenix JSON APIで、データベースに存在しないオブジェクトを要求すると、Ecto NoResultsErrorが発生します。Phoenix Ecto NoResultsErrorの処理方法

404エラーとともにJSON APIでnullを返すようにします。

どうすればよいですか?

現在、私はかなりは、デフォルトでは私はこのようなコントローラを変更したHTMLのコントローラ/ビューなどを生成した:

ビューとともに
def show(conn, %{"id" => id}) do 
    my_model = Repo.get!(MyModel, id) 
    case get_format(conn) do 
    "json" -> 
     render(conn, my_model: my_model) 
    _ -> 
     render(conn, "show.html", my_model: my_model) 
    end 
end 

defmodule MyProject.MyModelView do 
    use Laired.Web, :view 

    def render("show.json", %{my_model: my_model}) do 
    my_model 
    end 
end 

関連:

Setting up custom response for exception in Phoenix Application

答えて

10

代わりにgetを使用してくださいget!の場合、ロジックを処理し、nilを返します。

def show(conn,%{"id" => id}) do 
    case Repo.get(MyModel, id) do 
    nil -> # return null and 404 
    record -> # do something with record   
    end 
end 
関連する問題