2013-02-28 62 views
0

我目前正在使用Devise进行用户身份验证,并且我想实现后端管理来控制管理面板中用户的创建。Rails命名空间 - 从第二个控制器调用模型

我已经生成了一个管理控制器,并且我已经为我的路由添加了一个命名空间。

-> routes.rb 

namespace :admin do 
    resources :users 
end 

当我耙路线,我得到以下

  admin_users GET /admin/users(.:format)   admin/users#index 
        POST /admin/users(.:format)   admin/users#create 
     new_admin_user GET /admin/users/new(.:format)  admin/users#new 
    edit_admin_user GET /admin/users/:id/edit(.:format) admin/users#edit 
      admin_user GET /admin/users/:id(.:format)  admin/users#show 
        PUT /admin/users/:id(.:format)  admin/users#update 
        DELETE /admin/users/:id(.:format)  admin/users#destroy 

这就是我们想要吧?现在我的问题是,管理控制器中的函数的命名约定是什么?

如何命名我的功能,以便它们对应于以下路径?我将这些功能放在用户控制器或管理员中?

我得到一个路由错误

uninitialized constant Admin 

我不认为我已经得到了路由,只是还没有的窍门。任何额外的资源也将不胜感激。

我一直在寻找http://guides.rubyonrails.org/routing.html#controller-namespaces-and-routing虽然没有太大的成功。非常感谢!

回答

3

这里是一个命名空间控制器,一个典型的设置(请特别注意继承):

# app/controllers/admin/base_controller.rb: 
class Admin::BaseController < ApplicationController 
end 

# app/controllers/admin/users_controller.rb: 
class Admin::UsersController < Admin::BaseController 
    # here, you can define all of the methods shown by 'rake routes': 
    def index 
    # ... 
    end 

    def show 
    # ... 
    end 

    # etc... 
end 

Admin::BaseController提供了一个很好的顶层类为管理员命名空间,类似于ApplicationController如何与其余的控制器。您可以在此处抛出一个before_filter来授权管理员用户,这将在从基础控制器继承的类的任何方法之前调用。

+0

非常感谢。我正在测试你的代码,我被带走了,忘了谢谢你。 – 2013-02-28 07:31:19

+0

我还有一个问题!现在,当我转到url/admin/users/new时,它将新功能指向用户控制器。我试图重新启动服务器无济于事。嗯。有什么想法吗? – 2013-02-28 07:57:16

+0

这是我的错误。拼写错误。再次感谢! – 2013-02-28 08:19:05