Rails - 从RESTFul资源到自定义路由

时间:2012-02-08 04:07:48

标签: ruby-on-rails namespaces routes

这是我想弄清楚的设计问题。我将解释我现在拥有的东西,以及我想要的东西:

1。实际设计

我有一个已定义的resources :users,通过这样做,我在Users控制器中定义了不同的操作,例如new,create和update。按照预期的方式运行 urls ,例如users / new,users /:id等... 现在我想向前迈出一步,我希望能够做到以下几点......

2。我在找什么

我希望能够有这样的路线:

users/overview/profile - This should be equivalent to `users/:id` (show action) 
users/overview/network - This should be equivalent to users/:id/network (list of networks for that user)

第3。我的想法

我的第一个想法是定义这样的东西:

resource :users do
 namespace :overview do
  resource :networks
 end
end

但这适用于以下网址:users /:id / overview / networks,我不希望用户ID显示在网址中。所以我的问题是:

1 - 假设我可以从会话中获取用户ID,我该如何处理用户/概述/网络而不是用户/:id / overview / networks。

2 - 我如何能够管理这样的网址:users/overview/profile实际上个人资料只是users/:id的show方法现在我已经定义了用户控制器中的所有操作以及所有内容工作正常(新的,删除,创建,更新...)我只是不知道如何进入“命名空间”概述/个人资料

2 个答案:

答案 0 :(得分:0)

我尝试了同样的事情,它只返回你想要的结果,不知道你的问题是什么。在此处发布耙路线。

users_overview_networks POST        /users/overview/networks(.:format)         {:action=>"create", :controller=>"overview/networks"}
new_users_overview_networks GET         /users/overview/networks/new(.:format)     {:action=>"new", :controller=>"overview/networks"}
edit_users_overview_networks GET         /users/overview/networks/edit(.:format)    {:action=>"edit", :controller=>"overview/networks"}
GET         /users/overview/networks(.:format)         {:action=>"show", :controller=>"overview/networks"}
PUT         /users/overview/networks(.:format)         {:action=>"update", :controller=>"overview/networks"}
DELETE      /users/overview/networks(.:format)         {:action=>"destroy", :controller=>"overview/networks"}
users POST        /users(.:format)                           {:action=>"create", :controller=>"users"}
new_users GET         /users/new(.:format)                       {:action=>"new", :controller=>"users"}
edit_users GET         /users/edit(.:format)                      {:action=>"edit", :controller=>"users"}
GET         /users(.:format)                           {:action=>"show", :controller=>"users"}
PUT         /users(.:format)                           {:action=>"update", :controller=>"users"}
DELETE      /users(.:format)                           {:action=>"destroy", :controller=>"users"}

答案 1 :(得分:0)

  scope :path => 'users/overview' do
    match ':id/profile', :to => 'users#show'
    match ':id/network', :to => 'users#network'
  end