Rails命名空间根错误

时间:2013-12-26 02:06:17

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4

当我尝试将根定义到命名空间时,我遇到了一些错误。要重新创建它,我将从头开始重建项目。

rails new rails_test
cd rails_test
rails generate controller admin
rake db:migrate

现在我在app / controllers / admin_controller.rb中添加了一些样板文件

class AdminController < ApplicationController
    def index

    end
end
/ app / admin / index.html.erb

中的

<p>Index</p>

最后在config / routes.rb

  root to: 'admin#index'

这一切都很完美,当我启动服务器并点击'/'(root)url(它进入管理员索引页面)时,但这不是我想要的。

这意味着要成为更大项目的一部分,我想点击/ admin网址并获取管理员索引(从http://guides.rubyonrails.org/routing.html#using-root开始)我将routes.rb更改为:

  namespace :admin do
    root to: "admin#index"
  end

但是我收到了路由错误:

  

未初始化的常量管理员

包含一行的路线列表:

  

admin_root_path GET /admin(.:format)admin / admin #index

我从阅读最后一行结尾的想法是,我已经在管理员命名空间中,所以也许我不需要指定控制器索引,所以我尝试将路由更改为:

  namespace :admin do
    root to: "index"
  end

但是这给了我一个ArgumentError,在'root to:“index”'行上写着“missing:action”。

我可以通过使用范围来解决它,但看起来使用命名空间有点干净,我想了解这里出了什么问题。

Ruby / Rails版本

ruby -v -> ruby 1.9.3p392 (2013-02-22) [i386-mingw32]
rails -v -> Rails 4.0.0

任何帮助都是适用的

4 个答案:

答案 0 :(得分:1)

namespace名称空间控制器也是如此。将你的改为

class Admin::AdminController < ApplicationController
    def index

    end
end

将其移至app/controllers/admin下。这就是admin/admin#index的含义。 :)

答案 1 :(得分:0)

根据rubyonrails.org guide on routing你应该可以做这样的事情。 它看起来应该是这样的

namespace :admin do
  root to: "admin#index"
end

root to: "home#index"

你对rake路线有什么看法?

答案 2 :(得分:0)

在轨道4上的路线中,两个根目前没有被允许

使用 得到“/ admin”=&gt; “admin / admin #index”,:as =&gt; “管理员”

输入终端

rails generate scaffold Admin::User username email

rake db:migrate

如果只有控制器输入此

rails generate controller Admin::User

答案 3 :(得分:0)

我认为你真正想要的是像

namespace :admin do
    get 'other'
end

get 'admin' => 'admin#index'

这允许indexother方法位于通常目录中的直接AdminController控制器中,视图位于views/admin等。

您也可以使用

resource :admin, only: [:index] do
    get 'other'
end