Rails 3 |路由:如何重命名资源标题?

时间:2011-01-01 15:58:12

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

通常我有MenuItems模型并试图使'/ menu_items(/:id(:/ some_action))'的网址看起来像'/ menu(/:id(:/ some_action))'

在Rails 2.3.5中它是

map.resources :menu_items, :as => :menu, :path_names => { :new => 'add' }

现在在Rails 3.0.3中我可以使用这段巨大的代码来处理它

  
  resources :menu_items, :path_names => { :new => 'add' }
  match 'menu/' => 'menu_items#index', :as => :menu
  match 'menu/add' => 'menu_items#new', :as => :new_menu
  match 'menu/:id' => 'menu_items#show', :as => :show_menu
  match 'menu/:id/edit' => 'menu_items#edit', :as => :edit_menu

但由于代码量很大,它看起来不正确。 似乎:就像第二个Rails的map.some_name现在一样。

任何帮助/建议/指南? (感谢)

2 个答案:

答案 0 :(得分:26)

http://guides.rubyonrails.org/routing.html#customizing-resourceful-routes

resources :menu, :controller => "menu_items", :path_names => { :new => "add" }

输出非常接近你所追求的目标:

menu_index GET    /menu(.:format)             {:controller=>"menu_items", :action=>"index"}
           POST   /menu(.:format)             {:controller=>"menu_items", :action=>"create"}
  new_menu GET    /menu/add(.:format)         {:controller=>"menu_items", :action=>"new"}
 edit_menu GET    /menu/:id/edit(.:format)    {:controller=>"menu_items", :action=>"edit"}
      menu GET    /menu/:id(.:format)         {:controller=>"menu_items", :action=>"show"}
           PUT    /menu/:id(.:format)         {:controller=>"menu_items", :action=>"update"}
           DELETE /menu/:id(.:format)         {:controller=>"menu_items", :action=>"destroy"}

答案 1 :(得分:13)

另一种方式

resources :menu, :as => :menu_items, :controller => :menu_items

这种方法的优点是现有的辅助方法如menu_items_path仍可用。