У меня есть приложение для направляющих, которое включает API-интерфейс JSON. Когда значения правильно указаны, контроллер обрабатывает счастливый путь очень хорошо, и JSON представляется, как произведено.
Однако, если существует проблема с входом, исключение повышено и некоторые шаблоны в rescues
представляются вместо этого. Я был бы действительно точно так же, как для возврата ошибки JSON вроде { "error": { "msg": "bad request", "params": ... } }
и соответствующий код состояния HTTP (например, 403, если они не аутентифицировались). Но я только хочу, чтобы это было применимо к запросам против чего-либо в example.com/api/...
.
Как я могу сделать это?
У меня был аналогичный случай, но я спас отдельные методы API отдельно поскольку мне нужны были ошибки, специфичные для метода, у меня также могло быть несколько спасений в зависимости от типа ошибки.
в моем контроллере приложения у меня был метод:
def error(status, code, message)
render :js => {:response_type => "ERROR", :response_code => code, :message => message}.to_json, :status => status
end
Затем в моем контроллере API
def some_method
## do stuff
rescue
error(500, method_specific_error_code, "it all done broke")
## additional error notifications here if necessary.
end
, поскольку я спасал ошибку, мне нужно было явно вызвать api hoptoad.
Для аутентификации у меня был before_filter
для login_required
def login_required
error(403, 403, "Not Authenticated") unless authenticated
end
И для исправления ошибок 404:
def render_404
error(404, 404, "Unknown method")
end
Надеюсь, это поможет!
Как насчет around_filter
на вашем контроллере api. Что-то вроде
around_filter :my_filter
private
def my_filter
begin
yield
rescue
render :js => ...
end
end