所以我想访问: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的超类不匹配
我做错了什么? 我也可以在这里设置不同的视图和布局,用于/ app / controller / panel / * _ controller.rb中的控制器
答案 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