2015-12-06 2 views
6

В моем API-интерфейсе Phoenix JSON я получаю Ecto NoResultsError, когда я запрашиваю объект, который не существует в базе данных.Phoenix Ecto как обрабатывать NoResultsError

Я хочу, чтобы мой API JSON возвращал нуль вместе с ошибкой 404.

Как мне это сделать?

В настоящее время я довольно много уже по умолчанию генерируется 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 
Смежные вопросы