Search code examples
ruby-on-railsrubyrspecruby-on-rails-5actioncontroller

skip_before_action and Rails 5


I just upgraded to Rails 5 and everything went pretty smoothy but for no apparent reason a method that is called after skip_before_action is not allowing rspec to run with this message

Before process_action callback :redirect_heroku_user has not been defined (ArgumentError)

It is super strange because it works just fine on rails 4. Here is my code:

# application_controller.rb
def redirect_heroku_user
  redirect_to root_path if heroku_user?
end 

# some_controller.rb
skip_before_action :redirect_heroku_user, only: :edit

Solution

  • According to this thread

    ActiveSupport::Callbacks#skip_callback now raises an ArgumentError if an unrecognized callback is removed.

    So your solution is to pass raise: false option to skip_before_action:

    skip_before_action :redirect_heroku_user, raise: false
    

    See the changelog for more info.