确定在Rails 3中已经设置了before_filters

Ste*_*fen 6 ruby-on-rails before-filter actioncontroller

我有一个用于控制器配置的DSL.底层功能依赖于before_filters.为了防止多次设置before_filter,我真的需要找出是否已经在Rails 3控制器中设置了before_filter.由于before_filter的工作与类变量(继承,类重新加载)不同,我不能只设置要检查的类变量.

深入研究AbstractController回调的新高度抽象代码并没有给出任何关于这是否可行的线索.

我是否真的需要为控制器中的每个DSL呼叫调用skip_filter?

Noa*_*Ari 13

以下是我发现的方法:

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 >
Run Code Online (Sandbox Code Playgroud)

  • 适用于Rails 4.0.2。 (2认同)