自定义控制器的Ruby路由

时间:2013-08-20 20:14:47

标签: ruby-on-rails ruby rails-routing

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

在我开始之前,我是红宝石的新手,我几个小时前就开始了

所以在我的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的超类不匹配 enter image description here

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

2 个答案:

答案 0 :(得分:2)

替换此

class IndexController < ApplicationController

class Panel::IndexController < ApplicationController

更新

自动生成命名空间控制器,你可以像这样使用rails build in generator

rails g controller panel/users

这将在Panel::Users < ApplicationController

下生成app/controllers/panel/users_controller.rb控制器

答案 1 :(得分: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