Имена и объекты были упрощены для большей ясности. Основная концепция остается прежней.
У меня три контроллера: dog
, cat
и horse
.
Эти контроллеры все наследуются от контроллера animal
.
В контроллере animal
у меня есть фильтр before, который аутентифицирует пользователя как такового:
before_filter :authenticate
def authenticate
authenticate_or_request_with_http_basic do |name, password|
name == "foo" && password == "bar"
end
end
В действии show
dog
я должен иметь открытый доступ для всех пользователей (пропустите аутентификацию).
Если бы я должен был написать аутентификацию отдельно для dog
, я мог бы сделать что-то вроде этого:
before_filter :authenticate, :except => :show
Но так как dog
наследует от animal
, у меня нет доступа к действиям, зависящим от контроллера. Добавление :except => :show
в контроллер animal
не только пропускает аутентификацию для действия show
dog
, но также и cat
и horse
. Такое поведение нежелательно.
Как пропустить аутентификацию только для действия show
dog
, но наследуя от animal
?