2

我继承了一个项目,以前的开发人员将它添加到应用程序控制器中:

rescue_from Exception, :with => :render_500

我想它是为了捕捉这个并呈现一个动态页面。静态页面是不可接受的,但我现在不确定为什么会这样。无论如何,这会破坏我使用 Exceptional 捕获异常的能力。在呈现动态错误页面后,有什么方法可以重新引发异常?

我试过这个:

def rescue_from(exception)
  respond_to |format|
    format.html { #render the page# }
  end
  raise exception
end

然而,这很明显是行不通的。有任何想法吗?

4

3 回答 3

6

你可以手动发布到例外——而不是尝试重新加注并获得例外来捕获和发布。

def rescue_from(exception)
  ::Exceptional::Catcher.handle(exception)
  respond_to |format|
    format.html { #render the page# }
  end
end
于 2012-12-11T18:42:09.957 回答
1

你能在开始或救援中引发异常并在确保中执行respond_to吗?

我在下面提供 b),因为我不确定 a) 是否有效。显然,您可以在 b) 示例中引发任何异常以进入救援块,然后引发传入的异常。

任何一个:

一个)

begin
 raise exception
ensure
  respond_to |format|
    format.html { #render the page }
  end
end

或者

b)

begin
  raise exception
rescue Exception => e
  raise e
ensure
  respond_to |format|
    format.html { #render the page }
  end
end
于 2012-12-11T18:24:12.160 回答
0

像这样的东西应该工作 -

rescue_from Exception, :with => :render_500

def rescue_500(exception)
    raise exception
end

查看文档,如果这不起作用,那应该可以帮助您找到可行的解决方案。

于 2012-12-11T18:25:59.900 回答