13

如果操作引发异常,是否有类似于 after_filter 的东西仍然运行?

我正在使用外部记录器(因为我在 Heroku 上);响应标头被过滤并记录在 after_filter 中。如果引发异常,则过滤器不会运行,并且我没有响应标头数据的日志。

如果我尝试挂钩 log_error 或rescue_action_in_public,响应标头将不完整(因为在这些之后调用了实际渲染)。

是否有另一个我可以覆盖的函数将在与 after_filter 等效的时间调用,但无论是否引发异常都始终运行?

谢谢!

4

1 回答 1

12

您可以使用 around_filter 并捕获异常。例如

# in a controller
around_filter :catch_exceptions

def catch_exceptions
  yield
rescue ActiveRecord::RecordNotFound
  permission_denied_response # gives a stock error page
end

您可以在 application.rb 控制器类或单个控制器的类中添加 around_filter。

于 2010-09-02T04:10:02.903 回答