2013-02-28 63 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