2011-01-21 55 views
2

我有我的常規ApplicationController類&我有一個Admin :: ApplicationController類。問題是Admin :: ApplicationController似乎沒有被加載或執行或任何東西。我不允許擁有名稱空間的應用程序控制器嗎?想要擁有它的理由是,我可以檢查用戶是否是管理員,如果他們不是,那麼CanCan &將他們重定向。命名空間ApplicationController在Rails中

回答

4

調用此控制器Admin::BaseController,因爲它更像是作爲命名空間的基礎,而不是爲應用程序執行任何操作。爲了做到你想做的事情,你需要讓所有的管理員名稱空間控制器繼承自這個控制器。

+0

嗨瑞安,有什麼機會解釋爲什麼控制器應該改名?只是想知道,因爲我有一個功能Admin :: ApplicationController工作得很好。這不就是命名空間的重點嗎? – 2012-01-04 15:57:19

+0

雖然它不是一個ApplicationController。這是命名空間的* base *,其他地方都從其繼承。我的原因主要是因爲它是我們在模型中繼承的`ActiveRecord :: Base`。只是一點點的一致性。 – 2012-01-04 22:09:10

1

我見過的命名空間的唯一時間是當控制器嵌套在子文件夾中時。所以管理員:: ApplicationController的期望是在控制器/管理/ application_controller.rb

一個可能的解決方案:

如果你想除了你的主頁一切踢出來,只要設定的before_filter您的應用程序控制器與家用/指數像這樣的例外:

ApplicationController.rb

before_filter :authorize_admin 

def authorize_admin 
    //dostuff 
end 

HomeController.rb

skip_before_filter :authorize_admin, :only => ['index'] 

索引是您想要跳過的操作。爲了避免整個控制器的過濾器脫落。