Пропустите before_filter в направляющих

Имена и объекты были упрощены для пользы ясности. Фундаментальное понятие остается тем же.

У меня есть три контроллера: 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?

61
задан Patsy Issa 17 April 2015 в 09:45
поделиться

2 ответа

class Dog < Animal
  skip_before_filter :authenticate, :only => :show
end

См. ActionController :: Filters :: ClassMethods для получения дополнительной информации о фильтрах и наследовании.

111
ответ дан 24 November 2019 в 17:12
поделиться

Для этого вы можете использовать skip_before_filter

Это объясняется в Rails API

В вашем примере dog просто должен содержать

skip_before_filter :authenticate
3
ответ дан 24 November 2019 в 17:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: