6

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

挖掘 AbstractController 回调的新的高度抽象的代码并不能告诉我这是否可能。

我真的需要为控制器中的每个 DSL 调用调用 skip_filter 吗?

4

1 回答 1

16

以下是我发现的一种方法:

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 >
于 2011-02-08T20:39:24.907 回答