为什么这次加注没有获救,什么会纠正它以便它?

时间:2015-08-21 19:25:53

标签: ruby-on-rails ruby rescue raise

我正在尝试创建自己的StandardError异常,但我似乎无法通过加注触发rescue_from。错误被提出但从未获救。我构建了一个简单的应用程序来尝试它,如下所示:

class ApplicationController < ActionController::Base

  protect_from_forgery with: :exception

  class ApplicationController::LocationInvalid < StandardError
  end

  rescue_from ApplicationController::LocationInvalid, with: :reset_it

  raise ApplicationController::LocationInvalid

  private

  def reset_it(exception)
    session.clear
    cookies['XSRF-TOKEN'] = form_authenticity_token if protect_against_forgery?
    puts 'Reset it processed'
  end
end

当我在begin / rescue / end中包含加注时,它会将e打印为ApplicationController :: LocationInvalid:

  begin
    raise ApplicationController::LocationInvalid
  rescue => e
    puts e
  end

输出:

  

开始GET&#34; /&#34;对于127.0.0.1在2015-08-21 15:19:32 -0400   ApplicationController中:: LocationInvalid

我已尝试过各种形式的指定ApplicationController类,但结果没有变化......

1 个答案:

答案 0 :(得分:1)

根据Rails https://github.com/rails/rails/blob/f62fb985b6a7b90872148f0786219c9cc94c9356/actionpack/lib/action_controller/metal/rescue.rb#L32

的源代码

rescue_with仅在process_action来电期间有效,但您在课堂评估期间提出异常。可能最简单的测试方法是使用一些操作创建简单的控制器,并尝试在该操作期间引发异常,rescue_with应该有效。