Ресурс по умолчанию для маршрута в пространстве имен? - PullRequest
2 голосов
/ 20 ноября 2011

При маршрутизации в Rails 3, используя маршрут с пространством имен, как в следующем примере ...

namespace :admin do
    get 'dashboard' => 'dashboard#index'
end

... как мне получить '/ admin' для маршрутизации в 'dashboard # index' , а также '/ admin / dashboard' ?Будет ли лучший способ сделать это, чтобы определить ...

get 'admin' => 'admin/dashboard#index'

вне пространства имен или есть более элегантный способ для псевдонима ресурса?

Ответы [ 2 ]

7 голосов
/ 20 ноября 2011

Вы можете сделать путь просто /, который внутренне удаляется маршрутизатором Rails и становится просто /admin. Разница лишь в том, что он находится внутри вашего пространства имен, а не за его пределами.

namespace :admin do
  get 'dashboard' => 'dashboard#index'
  get '/' => 'dashboard#index'
end

Который производит:

admin_dashboard GET /admin/dashboard(.:format) {:action=>"index", :controller=>"admin/dashboard"}
          admin GET /admin(.:format)           {:controller=>"admin/dashboard", :action=>"index"}

Вы также можете выполнить перенаправление с помощью встроенного redirect метода:

namespace :admin do
  get 'dashboard' => 'dashboard#index'
  get '/' => redirect('/admin/dashboard')
end

Или, если вы хотите сделать это вне пространства имен:

get '/admin' => redirect('/admin/dashboard')

Мне лично больше всего нравится первый пример. Содержит его в пространстве имен и выглядит очень похоже на корневой маршрут по умолчанию, поэтому его легко прочитать при работе в маршрутах с пространством имен администратора.

4 голосов
/ 16 февраля 2015

В Rails 4 я использую:

namespace :admin do
  root 'dashboard#index'
end

И вы также можете определить свой собственный маршрут для /admin/dashbaord:

namespace :admin do
  root 'dashboard#index'
  get 'dashboard' => 'dashboard#index'
end
...