Skip before_filter in Rails
before-filter, inheritance, ruby-on-rails
Solution
class Dog < Animal
skip_before_filter :authenticate, :only => :show
end
See ActionController::Filters::ClassMethods for more info on filters and inheritance.
Problem
Names and objects have been simplified for clarity's sake. The basic concept remains the same. I have three controllers: `dog`, `cat`, and `horse`. These controllers all inherit from the controller `animal`. In the controller `animal`, I have a before filter that authenticates a user as such: ``` before_filter :authenticate def authenticate authenticate_or_request_with_http_basic do |name, password| name == "foo" && password == "bar" end end ``` In the `show` action of `dog`, I need to have open access to all users (skip the authentication). If I were to write the authentication separately for `dog`, I could do something like this: ``` before_filter :authenticate, :except => :show ``` But since `dog` inherits from `animal`, I do not have access to the controller-specific actions. Adding `:except => :show` in the `animal` controller will not only skip authentication for the `show` action of `dog`, but also that of `cat` and `horse`. This behaviour is not desired. How can I skip the authentication only for the `show` action of `dog` while still inheriting from `animal`?