Rails3中的rescue_action如何工作?

时间:2011-03-28 15:09:40

标签: ruby ruby-on-rails-3

我想实现这个

class SecurityTransgression < StandardError; end

 def create
   raise SecurityTransgression unless ...
 end

class ApplicationController < ActionController::Base
  def rescue_action(e)
  case e
    when SecurityTransgression
      head :forbidden
    end
  end
end

来自this blogpost

问题是它不起作用。我没有看到禁止页面,但标准的Rails错误页面“MyController#action中的SecurityViolation”。我发现一些rescue_action方法只能在生产模式下工作。我试过了,它是一样的。没有变化。

我的问题:是否有关于rescue_action方法(以及其他方法)的任何良好文档?这在Rails 3.0下有用吗?因为看起来这是一些旧的

2 个答案:

答案 0 :(得分:4)

API documentation处查看rescue_from。

答案 1 :(得分:1)

rescue_action方法通常在内部调用,并将@_env哈希作为参数传递。该方法期望Exception实例存在于“action_dispatch.rescue.exception”键中。

如果必须直接使用rescue_action方法,则可以执行以下操作: -

@_env[ "action_dispatch.rescue.exception" ] = exception
rescue_action( @_env )

甚至更简单: -

rescue_action( { "action_dispatch.rescue.exception" => exception } )