【发布时间】:2018-12-17 17:30:30
【问题描述】:
如果我使用 --api 标志在 Rails 中创建应用程序,我的错误响应是 html 而不是 json。
如何更改默认错误处理程序,以便每当控制器操作中引发错误时,我都会收到仅包含错误和 http 状态的 json 响应?
现在我在每个自定义操作中都使用下面的代码
rescue => e
response.status = 422
render json: { error: e.message }
我宁愿不必每次都添加这个......
更新: 我在应用控制器中使用了rescue_from方法
rescue_from Exception do |exception|
render json: exception, status: 500
end
但是我觉得这样很不对劲,status会一直硬编码为500
【问题讨论】:
-
你可以在你的application_controller中添加rescue_from来捕捉每一个错误apidock.com/rails/ActiveSupport/Rescuable/ClassMethods/…
-
如果我这样做了,我将不会拥有我通常会收到的状态......这怎么不是已经内置了??
-
嗯,我没有完全得到你真正想要的东西。但是如果你想渲染不同的消息和状态取决于异常,那么你可以设置多个rescue_from。或者您可以定义多个 error_render 方法并将其排序到一个大的 rescue_from 中。 PS:也请不要抢救Exception。将其更改为 StandardError。
-
我在我的路由中添加了默认值:{ format: :json } 并对其进行了转换 - 但是我仍然在更改所有路由的默认格式,因此对配置的任何建议将不胜感激:)
标签: ruby-on-rails json ruby http