Rails命名空间 - 从第二个控制器调用模型

时间:2013-02-28 06:54:05

标签: ruby-on-rails ruby namespaces

我目前正在使用Devise进行用户身份验证,我希望实现一个后端管理员来控制管理面板中用户的创建。

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

-> 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并没有取得多大成功。非常感谢!

1 个答案:

答案 0 :(得分: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为admin命名空间提供了一个很好的顶级类,类似于ApplicationController与其他控制器的关系。您可以在此处抛出before_filter以仅授权管理员用户,这将在从基本控制器继承的类中的任何方法之前调用。