找出哪个before_filters已经在Rails 3中设置了
问题描述:
我有一个用于控制器配置的DSL。底层功能依赖于before_filters。为了防止多次设置before_filter,我真的需要找出在Rails 3控制器中是否已经设置了before_filter。由于before_filter与类变量(继承,类重新加载)不同,我不能只设置一个类变量来检查。找出哪个before_filters已经在Rails 3中设置了
通过对一个AbstractController回调新的高度抽象的代码挖不给任何线索,对我来说这是不可能的。
我真的需要调用skip_filter在控制器每个DSL电话吗?
答
下面是一种方法,我发现做到这一点:
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的好东西本身... – 2011-02-22 13:09:48
作品为Rails 4.0.2。 – Daniel 2014-01-16 20:32:51
显示所有过滤器也很有用(有可能是 “左右”): 'ApplicationController._process_action_callbacks.map {| C |放置“#{c.kind} - #{c.filter}”}' – 2017-02-24 17:37:51