Имена и объекты были упрощены для пользы ясности. Фундаментальное понятие остается тем же.
У меня есть три контроллера: dog
, cat
, и horse
. Эти контроллеры все наследовались контроллеру animal
. В контроллере animal
, Я имею перед фильтром, который аутентифицирует пользователя как такового:
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
?
class Dog < Animal
skip_before_filter :authenticate, :only => :show
end
См. ActionController :: Filters :: ClassMethods для получения дополнительной информации о фильтрах и наследовании.
Для этого вы можете использовать skip_before_filter
Это объясняется в Rails API
В вашем примере dog
просто должен содержать
skip_before_filter :authenticate