Ruby on rails Rails中的命名空间应用程序控制器
我有一个常规的ApplicationController类&我有一个Admin::ApplicationController类。问题在于,Admin::ApplicationController似乎没有被加载或执行或其他任何操作。是否不允许我拥有命名空间的应用程序控制器?想要拥有它的理由是,我可以检查用户是否是管理员,如果不是,可以将其重定向出去。称此控制器为Ruby on rails Rails中的命名空间应用程序控制器,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我有一个常规的ApplicationController类&我有一个Admin::ApplicationController类。问题在于,Admin::ApplicationController似乎没有被加载或执行或其他任何操作。是否不允许我拥有命名空间的应用程序控制器?想要拥有它的理由是,我可以检查用户是否是管理员,如果不是,可以将其重定向出去。称此控制器为admin::BaseController,因为它更像是命名空间的基础,而不是为应用程序做任何事情。要使其执行您想要执行的操作,您需要使所
admin::BaseController
,因为它更像是命名空间的基础,而不是为应用程序做任何事情。要使其执行您想要执行的操作,您需要使所有具有管理员名称空间的控制器从此控制器继承。我见过的唯一一次这样的名称空间是当控制器嵌套在子文件夹中时。所以Admin::ApplicationController应该位于controllers/Admin/application\u controller.rb中
before_filter :authorize_admin
def authorize_admin
//dostuff
end
skip_before_filter :authorize_admin, :only => ['index']
一种可能的解决办法:
如果您希望除去主页之外的所有内容都将其清除,只需在应用程序控制器上设置一个before_筛选器,但home/index除外,如下所示:
ApplicationController.rb
before_filter :authorize_admin
def authorize_admin
//dostuff
end
skip_before_filter :authorize_admin, :only => ['index']
HomeController.rb
before_filter :authorize_admin
def authorize_admin
//dostuff
end
skip_before_filter :authorize_admin, :only => ['index']
其中索引是要跳过的操作。取消“仅”以跳过整个控制器的过滤器。嗨,Ryan,有没有机会解释为什么要重命名控制器?只是想知道,因为我有一个功能性的Admin::ApplicationController,它工作得很好。这不是名称空间的重点吗?但它不是应用程序控制器。它是名称空间的基础,其他任何地方都继承它。我这样做的原因主要是因为我们在模型中继承的是
ActiveRecord::Base
。只是有点连贯性。谢谢。在我的应用程序中,一致性是相反的。Admin::ApplicationController继承自ActionController::Base。出于所有意图和目的/admin在主应用程序中是一个单独的应用程序,在过滤和所有内容之前都有自己的应用程序。它对我来说非常有效。我同意在过滤器之前的中使用授权方法会更简单。对我来说,使用名称空间似乎是一个不必要的复杂问题。