2011-07-23 26 views
8

在Rails 2.8,我們可以寫skip_before_filter這樣的Rails做skip_before_filter的3路,:只有

skip_before_filter :require_login, :only => [:create,:new,:accept] 

這意味着,我想過濾require_login只適用於這些行動[:create,:new,:accept],並跳過其他過濾器。

但是看起來,這種方式是在rails 3中的deprecated。並且新增了skip_filter。我曾經嘗試這樣做

skip_filter :require_login, :only => [:create,:new,:accept] 

,但其沒有工作,所以我如何能在軌道3

回答

11
  • skip_before_filter還沒有被棄用,see source做到這一點。

  • 您正在按預期使用它。

那麼你是如何推斷它不能正常工作的?

+0

是的,那是我的錯..力看到它..謝謝:) – RameshVel

+0

:d我經常遇到同種情況;) – apneadiving

14

這是一個不正確的使用skip_before_filter

爲了獨佔應用濾鏡require_login到行動[:create,:new,:accept],並跳過其他過濾器,您必須首先應用的過濾器:

before_filter :require_login 

然後你必須告訴軌跳過此過濾器除了爲行動「創造,新的和接受」。

skip_before_filter :require_login, :except => [:create,:new,:accept] 

你也可以使用skip_filter,它允許你包括before_filterafter_filter,並且around_filter過濾器:

skip_filter :require_login, :except => [:create,:new,:accept] 

參考:Rails 3.2 guide

在Rails 4.0,等效方法是:before_action ,和:skip_before_action。

參考:Rails 4.0 guide

+0

這是一個良好的信息謝謝。 – dps