2011-11-17 16 views
0

我要聲明從ApplicationController的過濾器不同的控制器的一些方法象下面這樣:做before_filter:除了跨子類控制器的工作嗎?

ApplicationContoller

before_filter :authorize, :except => [:index, :show, :different_controller_method]

其中:different_controller_methodUserController定義。我們能做到嗎?

回答

0

通常這應該起作用。確保你使用的是符號,就像@jdl所說的那樣。

雖然我們大多數時候使用不同的方法。在你ApplicationController你寫

before_filter :authorize 

這樣定義的所有訪問被授權。在你UsersController可以再添加一個例外:

skip_before_filter :authorize, :only => [:index, :show, :different_controller_method] 

希望這有助於。

+0

是的,我也是這樣做的。但它不適合我。你的和我的代碼和我在上面看到的形式一樣,並讓我知道我在做什麼錯誤。 – Neelesh

+0

你是什麼意思:它不工作?你是否收到錯誤?它不適用於所有的方法嗎?方法拼寫是否正確?請描述更詳細的情況。否則,很難得到任何幫助。 – nathanvda

+0

否,除了僅適用於應用程序方法的範圍外,還需要使其適用於其他控制器的方法。我是否明確向你提問? – Neelesh

0

我們可以這樣做嗎?

是的,你可以。

+0

如何幫助我plz – Neelesh

+0

正如你所描述的(除了在ApplicationController應該工作正常) –

+0

沒有不工作 – Neelesh

1

但是你想保持它嗎?想象一下別人正在讀你的UserController類的定義。她會檢查UserController#differnt_controller_method上是否有任何過濾器,通常通過查看您定義的UserController類的相同文件。沒有找到任何過濾器,她會假設differnt_controller_method沒有任何過濾器。

最好將相關的東西放在一起,否則維護應用程序變得很難,因爲添加一個功能或修復一個錯誤將需要更改許多文件。我強烈建議你在GoRuCo 2009上給出Sandi Metz的this talk

+0

謝謝Ardsrk!但我只想要如何做到這一點? – Neelesh

+0

好的。但我想告訴你正確的做法。在相同的控制器類中聲明與控制器方法相關的過濾器是Rails約定。 – ardsrk

1

在清理問題的語法時,我注意到你沒有使用符號來描述你的'不同'方法。

before_filter :authorize, :except => [:index, :show, :different_controller_method]

和不

before_filter :authorize, :except => [:index, :show, different_controller_method]

通知結腸。

+0

如果你使用沒有列,它會給你錯誤: 未定義的局部變量或方法'different_controller_method'。 我正在使用:除[:different_controller_method] – Neelesh