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

jib*_*iel 12 routing ruby-on-rails ruby-on-rails-3

通常我有MenuItems模型并试图使'/ menu_items(/:id(:/ some_action))'URL看起来像'/ 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
Run Code Online (Sandbox Code Playgroud)

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

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

Hei*_*kki 26

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

resources :menu, :controller => "menu_items", :path_names => { :new => "add" }
Run Code Online (Sandbox Code Playgroud)

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

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"}
Run Code Online (Sandbox Code Playgroud)


tim*_*eon 13

其他方式

resources :menu, :as => :menu_items, :controller => :menu_items
Run Code Online (Sandbox Code Playgroud)

这种方法的优点是,诸如menu_items_path之类的现有辅助方法仍然有效.