Как добавить фильтр в самый конец цепочки фильтров из суперкласса? - PullRequest
1 голос
/ 18 июля 2009

в рельсах, когда вы регистрируете фильтры в абстрактных суперклассах, они идут перед фильтрами, зарегистрированными в классе контроллера. Скажем, я хотел выполнить метод с именем authenticate в качестве фильтра прямо в конце цепочки фильтров. Единственный способ понять это - объявить before_filter последним фильтром во всех моих классах контроллеров (а их много). Есть ли способ объявить этот фильтр в суперклассе и будет ли он выполняться последним? Причина, по которой я хочу, чтобы он выполнялся последним, заключается в том, что класс контроллера может изменять требования к аутентификации только для этого контроллера, и я хочу, чтобы эти изменения были приняты во внимание до вызова окончательного фильтра аутентификации.

Ответы [ 2 ]

2 голосов
/ 18 июля 2009

Используйте prepend_before_filter в классах контроллеров вместо before_filter или append_before_filter.

0 голосов
/ 18 июля 2009

Rails сначала вызывает ваш ApplicationController, а не локальный ... так что вы можете сделать что-то вроде этого (на своем примере):

В вашем контроллере приложений у вас будет обратный вызов before_filter и соответствующий метод, который вызывается:

before_filter :authenticate


def authenticate
  # do something
end

В контроллере для типа ресурса, с которым вы работаете ...

Вы можете переопределить / переопределить authenticate

def authenticate
 # do something else
end

Вы даже можете выбрать НЕ использовать обратный вызов authenticate для некоторых методов

skip_before_filter :authenticate, :only => :my_method_without_auth
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...