namespace(path, options = {}) public

Scopes routes to a specific namespace. For example:

namespace :admin do
  resources :posts

This generates the following routes:

    admin_posts GET    /admin/posts(.:format)          {:action=>"index", :controller=>"admin/posts"}
    admin_posts POST   /admin/posts(.:format)          {:action=>"create", :controller=>"admin/posts"}
 new_admin_post GET    /admin/posts/new(.:format)      {:action=>"new", :controller=>"admin/posts"}
edit_admin_post GET    /admin/posts/:id/edit(.:format) {:action=>"edit", :controller=>"admin/posts"}
     admin_post GET    /admin/posts/:id(.:format)      {:action=>"show", :controller=>"admin/posts"}
     admin_post PUT    /admin/posts/:id(.:format)      {:action=>"update", :controller=>"admin/posts"}
     admin_post DELETE /admin/posts/:id(.:format)      {:action=>"destroy", :controller=>"admin/posts"}

Supported options

The :path, :as, :module, :shallow_path and :shallow_prefix options all default to the name of the namespace.


The path prefix for the routes.

namespace :admin, :path => "sekret" do
  resources :posts

All routes for the above resources will be accessible through /sekret/posts, rather than /admin/posts


The namespace for the controllers.

namespace :admin, :module => "sekret" do
  resources :posts

The PostsController here should go in the Sekret namespace and so it should be defined like this:

class Sekret::PostsController < ApplicationController
  # code go here

Changes the name used in routing helpers for this namespace.

namespace :admin, :as => "sekret" do
  resources :posts

Routing helpers such as admin_posts_path will now be sekret_posts_path.


See the scope method.

Show source
Register or log in to add new notes.
September 30, 2011 - (v3.0.0 - v3.1.0)
0 thanks

Without module

If you want to have only the path prefix without namespacing your controller, pass :module => false.


namespace :account do
  resources :transactions, :only => [:index]

account_transactions GET /account/transactions(.:format)
{:controller=>"account/transactions", :action=>"index"}

With :module => false:

namespace :account, :module => false do
  resources :transactions, :only => [:index]

account_transactions GET /account/transactions(.:format)
{:controller=>"transactions", :action=>"index"}
January 10, 2012
0 thanks

with a params constant

If you want to have a params with the same value on all of the urls in this namespace, you can write this :

with a constant param :admin set to true

namespace :admin, :admin => true do
  resources :posts

all of the urls like /admin/post have a param :admin with the value true.

It works also with :

scope 'admin', :admin => true do

match 'administration', :admin => true => 'posts#index'

get 'administration', :admin => true