Определение того, какие фильтры before_filters уже установлены в Rails 3

У меня есть DSL для настройки контроллера. Базовая функциональность зависит от before_filters. Чтобы предотвратить установку before_filter более одного раза, мне действительно нужно выяснить, установлен ли уже before_filter в контроллере Rails 3. Поскольку работа before_filter отличается от переменных класса (наследование, перезагрузка класса), я не могу просто установить переменную класса для проверки.

Копание в новом высоко абстрактном коде для обратных вызовов AbstractController не дает мне ни малейшего представления, возможно ли это вообще.

Мне действительно нужно вызывать skip_filter для каждого вызова DSL в контроллере?


person Steffen    schedule 29.09.2010    source источник


Ответы (1)


Ниже приведен способ, который я нашел для этого:

noam$ rails c

Loading development environment (Rails 3.0.3)

ruby-1.9.2-p136 :001 > ApplicationController._process_action_callbacks.map {|c| c.filter if c.kind == :before}.compact
=> [:deny_banned_user, :validate_session, :verify_authenticity_token, :require_user_login]
ruby-1.9.2-p136 :002 >
person Noam Ben Ari    schedule 08.02.2011
comment
Не могу не задаться вопросом, было бы неплохо поместить это в сам Rails... - person Paul Russell; 22.02.2011
comment
Работает для Rails 4.0.2. - person Daniel; 17.01.2014
comment
Показать все фильтры также полезно (могут быть около): ApplicationController._process_action_callbacks.map {|c| puts "#{c.kind} - #{c.filter}" } - person Roman Pushkin; 24.02.2017