【问题标题】:FInding out which before_filters are already set in Rails 3找出 Rails 3 中已经设置了哪些 before_filters
【发布时间】:2010-09-29 11:44:04
【问题描述】:

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

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

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

【问题讨论】:

    标签: ruby-on-rails actioncontroller before-filter


    【解决方案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 >
    

    【讨论】:

    • 不禁想知道将其放入 Rails 本身是否是件好事...
    • 适用于 Rails 4.0.2。
    • 显示所有过滤器也有用(可能有“周围”):ApplicationController._process_action_callbacks.map {|c| puts "#{c.kind} - #{c.filter}" }
    • 适用于 Rails 7
    猜你喜欢
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 2010-11-14
    • 2014-02-25
    • 2015-02-10
    • 2011-03-14
    相关资源
    最近更新 更多