如果请求是XmlHttpRequest,是否可以呈现不同的异常页面?

时间:2009-08-30 09:37:35

标签: ruby-on-rails ajax exception-handling

如果Rails应用程序中存在异常,则会获得包含调用堆栈,请求参数和代码摘录的错误页面。

  1. 如果请求是XHR请求,是否可以创建不同的输出?
  2. 是否可以重新定义异常输出? (我假设会自动回答第一个问题)

2 个答案:

答案 0 :(得分:1)

您只能在开发模式下看到带有回溯的页面,而在生产模式下,您会看到标准错误页面(位于public / 500.html中),它只是说发生了错误。

这是出于安全原因,当然,它并不局限于rails:所有Web应用程序框架都是这样做的,因为回溯可以泄露敏感信息(有时您会在Web应用程序上看到错误消息)显示数据库连接字符串或某些密码等;好吧,你不希望这种情况发生。)

在开发模式下,在XHR调用中,您仍然会收到回溯(我使用firebug调试我的应用程序,因此我只需将其复制并粘贴到某处)。

在生产模式中,您可以通过设置:remote_function等函数的失败参数来显式设置要在错误时执行的函数,从而处理ajax调用中的XHR错误。

答案 1 :(得分:1)

您可以尝试在动作控制器中覆盖rescue_action

def rescue_action(exception)
  if request.xhr?
    custom_xhr_error_handling_for(exception)
  else
    super
  end
end

更传统的方法是使用rescue_from Exception, :custom_xhr_error_handling_for,但如果后来证明它不是xhr响应,则会使您无法让默认代码执行脏工作。