Search code examples
ruby-on-railserror-handlingrescue

Precedence of error handlers: rescue_from vs rescue in a method


In my application_controller.rb I have the following line

rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized

Now, in one method, I would like to handle that specific error differently and I've added this to one method in a controller.

class MyClass < ApplicationController
  def my_method

    # raising the Pundit::NotAuthorizedError in the method
    authorize resource, :my_method?
  
  rescue Pundit::NotAuthorizedError
    # code on how to deal with the error
  end
end

If I execute the code, the error handler from application_controller.rb will be handling my error instead of the error handler in the method.

So my question is, what is the precedence of the error handlers and is there any way I can change this, so that the error is handled in the method and not globally?


Solution

  • Please forget my previous answer, I myself made a mistake when reproducing your issue. In deed I am not able to reproduce it.

    Please have a look at this little demo app I created:

    https://github.com/andi-dev/rescue-handler-demo/blob/master/app/controllers/peas_controller.rb

    The rescue_from handler is not executed, and the browser shows what I render from the rescue block within the action-method.