1

Ruby on Rails 应用程序的一部分代码:

    #routes.rb
        namespace :admin do
              root :to => 'admin#index'
              resources :orders, :products
        end

  #controllers/admin/admin_contrller.rb
    class Admin::AdminController < ApplicationController
       def index

       end
    end

index视图位于views/admin/index.html.haml. 但是,它没有找到它(http://localhost:3000/admin缺少模板)。只有当它位于views/admin/admin/index.html.haml.

我做错了什么?我应该怎么做才能找到视图views/admin/index.html.haml

4

1 回答 1

4

您已经创建了命名空间 :admin 并将根路径和订单资源放在那里。根路径指向index. AdminController有了这个配置,rails 将在第一个管理员是命名空间,第二个是控制器目录index.html.haml下查找视图。views/admin/admin/index.html.haml

你没有做错什么。这就是rails的工作方式。

我会建议,而不是试图找到视图views/admin/index.html.haml来简单地将AdminController名称更改为DashboardController并创建BaseControlleradmin/目录下所有控制器的基类。

应用程序/控制器/管理员/admin_controller.rb

class Admin::BaseController < ApplicationController
  #auth etc.
end

应用程序/控制器/管理员/dashboard_controller.rb

class Admin::DashboardController < Admin::BaseController

end

通过这种方式,您可以轻松添加身份验证、授权、不同布局等以及管理控制器所需的其他内容

但是,如果您真的想对您的解决方案感到厌烦,您可以render admin/index像这样简单地执行索引操作:

class Admin::AdminController < ApplicationController
  def index
    render "admin/index"
  end
end
于 2012-08-26T22:14:00.857 回答