命名空间路由的默认资源?

时间:2011-11-20 06:57:09

标签: ruby-on-rails ruby ruby-on-rails-3 rails-routing

使用Rails 3中的路由,使用命名空间路由,如下例所示......

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

...如何让&#39; / admin&#39; 路由到&#39; dashboard #index&#39; 以及< EM>&#39; /管理/仪表板&#39; ?最好的方法是定义......

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

在命名空间之外还是有一种更优雅的方法来对资源进行别名?

2 个答案:

答案 0 :(得分:7)

您可以使路径/被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')

我个人最喜欢第一个例子。将其保留在命名空间内,看起来非常类似于默认的根路由,因此在Admin命名空间路由中工作时很容易阅读。

答案 1 :(得分:4)

在Rails 4中我使用:

namespace :admin do
  root 'dashboard#index'
end

您还可以为/admin/dashbaord定义自定义路线:

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