在Rails中可以通過namespace來管理controller。
首先生成scaffold:
script/generate scaffold article title:string body:text
在routes.rb中添加如下路由:
map.namespace :admin do |admin|
    admin.resources :articles
end

由意味著給article增加了一個名為admin的namespace,將controllers中的articles_controller.rb修改為controllers/admin/articles_controller.rb,也就是將這個控制器放到admin這個文件夾中。

先看一下相應的路由規則,執行rake roures:
              admin_articles GET    /admin/articles                  {:action=>"index", :controller=>"admin/articles"}
    formatted_admin_articles GET    
/admin/articles.:format          {:action=>"index", :controller=>"admin/articles"}
                             POST   
/admin/articles                  {:action=>"create", :controller=>"admin/articles"}
                             POST   
/admin/articles.:format          {:action=>"create", :controller=>"admin/articles"}
           new_admin_article GET    
/admin/articles/new              {:action=>"new", :controller=>"admin/articles"}
 formatted_new_admin_article GET    
/admin/articles/new.:format      {:action=>"new", :controller=>"admin/articles"}
          edit_admin_article GET    
/admin/articles/:id/edit         {:action=>"edit", :controller=>"admin/articles"}
formatted_edit_admin_article GET    
/admin/articles/:id/edit.:format {:action=>"edit", :controller=>"admin/articles"}
               admin_article GET    
/admin/articles/:id              {:action=>"show", :controller=>"admin/articles"}
     formatted_admin_article GET    
/admin/articles/:id.:format      {:action=>"show", :controller=>"admin/articles"}
                             PUT    
/admin/articles/:id              {:action=>"update", :controller=>"admin/articles"}
                             PUT    
/admin/articles/:id.:format      {:action=>"update", :controller=>"admin/articles"}
                             DELETE 
/admin/articles/:id              {:action=>"destroy", :controller=>"admin/articles"}

                             DELETE 
/admin/articles/:id.:format      {:action=>"destroy", :controller=>"admin/articles"}

                                    
/:controller/:action/:id
                                    
/:controller/:action/:id.:format

對比一下不加admin這個namespace時的路由:
          article_index GET    /article                         {:action=>"index", :controller=>"article"}
formatted_article_index GET    
/article.:format                 {:action=>"index", :controller=>"article"}
                        POST   
/article                         {:action=>"create", :controller=>"article"}
                        POST   
/article.:format                 {:action=>"create", :controller=>"article"}
            new_article GET    
/article/new                     {:action=>"new", :controller=>"article"}
  formatted_new_article GET    
/article/new.:format             {:action=>"new", :controller=>"article"}
           edit_article GET    
/article/:id/edit                {:action=>"edit", :controller=>"article"}
 formatted_edit_article GET    
/article/:id/edit.:format        {:action=>"edit", :controller=>"article"}
                article GET    
/article/:id                     {:action=>"show", :controller=>"article"}
      formatted_article GET    
/article/:id.:format             {:action=>"show", :controller=>"article"}
                        PUT    
/article/:id                     {:action=>"update", :controller=>"article"}
                        PUT    
/article/:id.:format             {:action=>"update", :controller=>"article"}
                        DELETE 
/article/:id                     {:action=>"destroy", :controller=>"article"}
                        DELETE 
/article/:id.:format             {:action=>"destroy", :controller=>"article"}
                               
/:controller/:action/:id
                               
/:controller/:action/:id.:format

所有的路由規則上面,都加上了admin這個namespace。

下面就要將views目錄下面的articles目錄改到views/admin目錄下面,因為根據路由規則,會到views/admin/articles/目錄下面去查找相應的模板。

另外,還需要將原來的new_article_url | new_article_path等helper方法修改為new_admin_article_url | new_admin_article_path,將這些helper方法全部加上admin這個namespace。