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

typ*_*ror 2 ruby ruby-on-rails rails-routing ruby-on-rails-3

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

namespace :admin do
    get 'dashboard' => 'dashboard#index'
end
Run Code Online (Sandbox Code Playgroud)

...如何让'/ admin'路由到'dashboard #index'以及'/ admin/dashboard'?最好的方法是定义......

get 'admin' => 'admin/dashboard#index'
Run Code Online (Sandbox Code Playgroud)

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

Gar*_*ett 7

您可以创建/Rails路由器内部剥离的路径,然后变为/admin.唯一的区别是它在你的命名空间内而不是在它之外.

namespace :admin do
  get 'dashboard' => 'dashboard#index'
  get '/' => 'dashboard#index'
end
Run Code Online (Sandbox Code Playgroud)

哪个产生:

admin_dashboard GET /admin/dashboard(.:format) {:action=>"index", :controller=>"admin/dashboard"}
          admin GET /admin(.:format)           {:controller=>"admin/dashboard", :action=>"index"}
Run Code Online (Sandbox Code Playgroud)

您还可以使用内置redirect方法进行重定向:

namespace :admin do
  get 'dashboard' => 'dashboard#index'
  get '/' => redirect('/admin/dashboard')
end
Run Code Online (Sandbox Code Playgroud)

或者,如果您想在命名空间之外执行此操作:

get '/admin' => redirect('/admin/dashboard')
Run Code Online (Sandbox Code Playgroud)

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


Geo*_*roy 5

在 Rails 4 中,我使用:

namespace :admin do
  root 'dashboard#index'
end
Run Code Online (Sandbox Code Playgroud)

您还可以为以下项目定义自定义路线/admin/dashbaord

namespace :admin do
  root 'dashboard#index'
  get 'dashboard' => 'dashboard#index'
end
Run Code Online (Sandbox Code Playgroud)