2010-09-29 49 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

相關問題