Имена и объекты были упрощены для ясности. Основная концепция остается прежней.
У меня есть три контроллера: 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
?