如何在URL中重命名REST路由?

时间:2011-02-16 03:31:29

标签: ruby-on-rails-3 routes

假设我有一个名为Apple的模型,它有一个控制器ApplesController,路由是:

resources :apples

    apples  GET    /apples (.:format)          {:controller=>"apples ", :action=>"index"}
  new_apple GET    /apples /new(.:format)      {:controller=>"apples ", :action=>"new"}
 edit_apple GET    /apples /:id/edit(.:format) {:controller=>"apples ", :action=>"edit"}

我想保持所有代码相同,但在URL中,“apple”将被“car”替换。因此,网址/apples/new将变为/cars/new

有没有办法在不触及应用程序中的任何其他代码的情况下执行此操作? (即在应用内部,它仍然是appleApplesController

我尝试了:as选项:

resources :apples, :as => "cars"

    cars    GET    /apples (.:format)          {:controller=>"apples ", :action=>"index"}
  new_car   GET    /apples /new(.:format)      {:controller=>"apples ", :action=>"new"}
 edit_car   GET    /apples /:id/edit(.:format) {:controller=>"apples ", :action=>"edit"}

但这只改变了路线的“名称”,而不是网址(因此new_apple_path变为new_car_path,但new_car_path仍然指向/apples/new而不是{{} 1}})

2 个答案:

答案 0 :(得分:60)

您要做的是传递:path选项

resources :apples, :path => "cars"

这会将所有路线引用替换为/apples/cars

请参阅:http://guides.rubyonrails.org/routing.html,第4.7节“翻译路径”

答案 1 :(得分:1)

对于那些只想重命名辅助方法部分的人:

resources :apples, as: "cars"

即。这会将apples_path替换为cars_path,但仍使用相同的控制器/操作。