Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails中的命名空间应用程序控制器_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails Rails中的命名空间应用程序控制器

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,因为它更像是命名空间的基础,而不是为应用程序做任何事情。要使其执行您想要执行的操作,您需要使所

我有一个常规的ApplicationController类&我有一个Admin::ApplicationController类。问题在于,Admin::ApplicationController似乎没有被加载或执行或其他任何操作。是否不允许我拥有命名空间的应用程序控制器?想要拥有它的理由是,我可以检查用户是否是管理员,如果不是,可以将其重定向出去。

称此控制器为
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在主应用程序中是一个单独的应用程序,在过滤和所有内容之前都有自己的应用程序。它对我来说非常有效。我同意在过滤器之前的
中使用授权方法会更简单。对我来说,使用名称空间似乎是一个不必要的复杂问题。