Rails中的命名空间ApplicationController

时间:2011-01-21 06:55:03

标签: ruby-on-rails ruby-on-rails-3

我有我的常规ApplicationController类&我有一个Admin :: ApplicationController类。问题是Admin :: ApplicationController似乎没有被加载或执行或任何东西。我不允许有命名空间的应用程序控制器吗?想要拥有它的原因是我可以检查用户是否是CanCan&的管理员。如果不是,请将它们重定向。

2 个答案:

答案 0 :(得分:5)

调用此控制器Admin::BaseController,因为它更像是作为命名空间的基础,而不是为应用程序做任何事情。为了做你想做的事,你需要让所有管理员命名空间的控制器都从这个控制器继承。

答案 1 :(得分:2)

我见过命名空间的唯一一次是控制器嵌套在子文件夹中。所以Admin :: ApplicationController应该在controllers / admin / 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']

索引是您要跳过的操作。不要忘记跳过整个控制器的过滤器。