0

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

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

所以在我的 routes.rb 我有这个

 namespace :panel do
   root 'index#index'
 resources :index
 end

我在 /app/controller/panel/index_controller.rb 中创建了一个名为 index_controller.rb 的文件,如下所示

class IndexController < ApplicationController
  def index
    @foo = "Foo"
  end
end

现在,当我转到 site.com/panel 时,我得到了这个:类 IndexController 的超类不匹配 在此处输入图像描述

我做错了什么?我也可以在这里设置不同的视图和布局以用于 /app/controller/panel/*_controller.rb 中的控制器

4

2 回答 2

2

替换这个

class IndexController < ApplicationController

class Panel::IndexController < ApplicationController

更新:

要自动生成命名空间控制器,您可以像这样在生成器中使用 rails build

rails g controller panel/users

这将在下生成Panel::Users < ApplicationController控制器app/controllers/panel/users_controller.rb

于 2013-08-20T20:18:03.220 回答
1

由于您已在index内命名资源路由panel,因此您需要在IndexController声明前添加前缀以反映这一点:

# app/controllers/index_controller.rb
class Panel::IndexController < ApplicationController

然后,您可以类似地在文件系统中反映命名空间,以便让 Rails 正确调用正确的视图:

/app/views/panel/index/index.html.erb
/app/views/panel/index/show.html.erb
... etc

注意:Rails 约定是声明为的路由resources应该命名为复数,因为这表示一个完全资源丰富的类。因此,按照这个范式,index实际上应该是indexes但是,我怀疑您可能打算使用单数路由,在这种情况下,声明如下:

namespace :panel do
    resource :index
end

这会创建以下奇异路线(可能更符合您要完成的任务):

         panel_index POST   /panel/index(.:format)                         panel/indices#create
      new_panel_index GET    /panel/index/new(.:format)                     panel/indices#new
     edit_panel_index GET    /panel/index/edit(.:format)                    panel/indices#edit
                      GET    /panel/index(.:format)                         panel/indices#show
                      PUT    /panel/index(.:format)                         panel/indices#update
                      DELETE /panel/index(.:format)                         panel/indices#destroy
于 2013-08-20T20:34:42.993 回答