我正在嘗試創建自己的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
當我包裹籌集開始/救援/結束,它打印ē作爲的ApplicationController :: LocationInvalid:
begin
raise ApplicationController::LocationInvalid
rescue => e
puts e
end
輸出:
入門使用 「/」 爲127.0.0.1,在2015年8月21日15時19分32秒-0400 的ApplicationController :: LocationInvalid
僅在process_action
呼叫我已經試過各種形式指定的ApplicationController類,而不是在結果沒有改變的......
嘗試'提升ApplicationController :: LocationInvalid.new'。 – CWitty
@CWitty謝謝你的建議。看起來很合理。但結果基本相同。我看到一個提示:「你可以提出任何事情」,看起來你可以提出一個課程或一個實例。 Rescue_from似乎並沒有分享那種隨便的態度...... –
我不知道在評估課程的時候你是否引發了異常,而且對於'reset_it'的def還沒有被評估呢?嘗試在方法中放置'raise',然後從控制檯或其他東西調用該方法。像Daiku說的 – Daiku