Ruby on rails 自定义控制器的Ruby路由

Ruby on rails 自定义控制器的Ruby路由,ruby-on-rails,ruby,rails-routing,Ruby On Rails,Ruby,Rails Routing,所以我想在访问时查看:site.com/panel/app/controller/panel/index_controller.rb 在我开始之前,我是ruby的新手,我是几个小时前开始的 所以在我的路线中,我有这个 namespace :panel do root 'index#index' resources :index end 我在/app/controller/panel/index\u controller.rb中创建了一个名为index\u controller.rb

所以我想在访问时查看:site.com/panel/app/controller/panel/index_controller.rb

在我开始之前,我是ruby的新手,我是几个小时前开始的

所以在我的路线中,我有这个

 namespace :panel do
   root 'index#index'
 resources :index
 end
我在/app/controller/panel/index\u controller.rb中创建了一个名为index\u controller.rb的文件,如下所示

class IndexController < ApplicationController
  def index
    @foo = "Foo"
  end
end
rails g controller panel/users
class IndexController
现在,当我访问site.com/panel时,我发现:类IndexController的超类不匹配

我做错了什么?
我还可以在这里设置不同的视图和布局,以用于/app/controller/panel/*\u controller.rb中的控制器替换此

class IndexController < ApplicationController
这将在
app/controllers/Panel/Users\u controller.rb下生成
Panel::Users
controller。替换此

class IndexController < ApplicationController

这将在
app/controllers/Panel/Users\u controller.rb下生成
Panel::Users
controller.rb

,因为您已经在
Panel
中命名了
索引
资源路由,您需要在
IndexController
声明前面加上前缀以反映这一点:

# app/controllers/index_controller.rb
class Panel::IndexController < ApplicationController
注意:Rails惯例是声明为
资源的路由应命名为复数,因为这表示一个完全资源丰富的类。因此,根据这个范例,
索引
实际上应该是
索引
。但是,我怀疑您可能想使用单数路径,在这种情况下,声明如下:

namespace :panel do
    resource :index
end
这将创建以下单一路线(可能更符合您试图实现的目标):


由于您已在
面板
中为
索引
资源路由命名了名称空间,因此需要在
索引控制器
声明前加前缀以反映以下内容:

# app/controllers/index_controller.rb
class Panel::IndexController < ApplicationController
注意:Rails惯例是声明为
资源的路由应命名为复数,因为这表示一个完全资源丰富的类。因此,根据这个范例,
索引
实际上应该是
索引
。但是,我怀疑您可能想使用单数路径,在这种情况下,声明如下:

namespace :panel do
    resource :index
end
这将创建以下单一路线(可能更符合您试图实现的目标):


这回答了我的第一个问题,现在我如何为此设置另一个布局,谢谢你的回答将新布局添加到布局文件夹中..例如app/views/layouts/panel.html.erb。。使用:layout“panel”在控制器顶部指定布局,但我想自动执行,我不想为app/controller/panel/*\u controller中的每个控制器手动执行此操作回答我的第一个问题,现在如何为此设置另一个布局,非常感谢您的回答将新布局添加到布局文件夹中..例如app/views/layouts/panel.html.erb。。使用:layout“panel”在控制器顶部指定布局,但我想自动执行,我不想为app/controller/panel/*\u controllers中的每个控制器手动执行此操作这是一个很好的注释,视图可以工作,但我想我需要在application\u controller.rb中进行某种检查,以便更改为不同的布局,类似于:如果site_url==/panel将布局更改为dis.html.erbRight,但是您的问题没有提到这个要求。关于命名空间相关布局的问题与您已经问过的不同,IMO.,如果这个答案满足您的问题,请您考虑接受它是否正确?也可以在这里设置不同的视图和布局,以用于控制器/APP/Panel/Pan/*yManual.RB中的控制器,这是主要问题,我可以接受,没问题,回答很好,但我想你也可以帮我解决布局问题。我强烈建议你在另一个问题中提出这个问题。。。您的问题内容很快变得过于密集,如果您保持简洁和切中要害,您的问题更有可能吸引高质量的解决方案(同样,IMO)。仅供参考,在
面板
命名空间中为每个控制器声明布局可能会更容易、更清晰。为一个名称空间实现一个catch-all布局所需的逻辑比仅仅为每个控制器添加一个声明要复杂得多。但是,如果您倾向于采用“一网打尽”的方法,下面的答案可能会有所帮助:这么好的评论,视图可以工作,但我想我需要在application_controller.rb中进行某种检查,以便更改为不同的布局,例如:如果site_url==/panel将布局更改为dis.html.erbRight,但是你的问题没有提到这个要求。关于命名空间相关布局的问题与您已经问过的不同,IMO.,如果这个答案满足您的问题,请您考虑接受它是否正确?也可以在这里设置不同的视图和布局,以用于控制器/APP/Panel/Pan/*yManual.RB中的控制器,这是主要问题,我可以接受,没问题,回答很好,但我想你也可以帮我解决布局问题。我强烈建议你在另一个问题中提出这个问题。。。您的问题内容很快变得过于密集,如果您保持简洁和切中要害,您的问题更有可能吸引高质量的解决方案(同样,IMO)。仅供参考,在
面板
命名空间中为每个控制器声明布局可能会更容易、更清晰。为一个名称空间实现一个catch-all布局所需的逻辑比仅仅为每个控制器添加一个声明要复杂得多。但是,如果您倾向于采用“一网打尽”的方法,以下答案可能会有所帮助: