我有一个用于控制器配置的 DSL。底层功能依赖于 before_filters。为了防止多次设置 before_filter,我真的需要找出是否已经在 Rails 3 控制器中设置了 before_filter。由于 before_filter 与类变量(继承、类重载)不同,我不能只设置一个类变量来检查。
挖掘 AbstractController 回调的新的高度抽象的代码并不能告诉我这是否可能。
我真的需要为控制器中的每个 DSL 调用调用 skip_filter 吗?
我有一个用于控制器配置的 DSL。底层功能依赖于 before_filters。为了防止多次设置 before_filter,我真的需要找出是否已经在 Rails 3 控制器中设置了 before_filter。由于 before_filter 与类变量(继承、类重载)不同,我不能只设置一个类变量来检查。
挖掘 AbstractController 回调的新的高度抽象的代码并不能告诉我这是否可能。
我真的需要为控制器中的每个 DSL 调用调用 skip_filter 吗?
以下是我发现的一种方法:
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 >