Как работает rescue_action в Rails3? - PullRequest
1 голос
/ 28 марта 2011

Я хотел бы реализовать это

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 "SecurityViolation в MyController # action".Я копал, что некоторые методы rescue_action работают только в производственном режиме.Я попробовал это, и это то же самое.Без изменений.

Мой вопрос : есть ли хорошая документация по методу rescue_action (и другим)?Это работает под Rails 3.0?Потому что, кажется, это какой-то старый

Ответы [ 2 ]

4 голосов
/ 28 марта 2011

Взгляните на rescue_from в документации API .

1 голос
/ 10 сентября 2011

Метод 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 } )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...