2010-09-29 32 views
4

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

通过对一个AbstractController回调新的高度抽象的代码挖不给任何线索,对我来说这是不可能的。

我真的需要调用skip_filter在控制器每个DSL电话吗?

回答

10

下面是一种方法,我发现做到这一点:

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 > 
+0

不禁怀疑这是否是把Rails的好东西本身... – 2011-02-22 13:09:48

+1

作品为Rails 4.0.2。 – Daniel 2014-01-16 20:32:51

+0

显示所有过滤器也很有用(有可能是 “左右”): 'ApplicationController._process_action_callbacks.map {| C |放置“#{c.kind} - #{c.filter}”}' – 2017-02-24 17:37:51

相关问题