我想实现这个
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
问题是它不起作用。我没有看到禁止页面,但标准的Rails错误页面“MyController#action中的SecurityViolation”。我发现一些rescue_action方法只能在生产模式下工作。我试过了,它是一样的。没有变化。
我的问题:是否有关于rescue_action方法(以及其他方法)的任何良好文档?这在Rails 3.0下有用吗?因为看起来这是一些旧的
答案 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 } )