4

我在使用 rescue_from 时遇到问题

class SimpleError < StandardError; end

before_action :raise_exception
rescue_from SimpleError, with: :rescue_exception    

def raise_exception
    raise SimpleError
end

def rescue_exception
    log $!
end

def index
    @unreachable_code = true
def

如您所见,在这段代码中,我只是在动作开始之前引发了一个异常,该异常被rescue_exception 方法捕获。问题是,在我捕捉到异常之后,应用程序流程停止并且永远无法到达操作代码。异常解救后是否可以继续执行?

4

1 回答 1

7

简短的回答,不。rescue_from旨在处理否则未被捕获的异常。

如果您想为控制器中的每个操作捕获特定异常,我建议使用around_action.

class MyController < ApplicationController
  class SimpleError < StandardError; end

  around_action :handle_simple_errors

  def index
    # code that might raise SimpleError
    @unreachable_code = true
  def

  private

  def handle_simple_errors
    begin
      yield
    rescue SimpleError
      # handle SimpleError however
    end
  end
end
于 2015-03-05T00:57:34.240 回答