假设我有一个名为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
。
有没有办法在不触及应用程序中的任何其他代码的情况下执行此操作? (即在应用内部,它仍然是apple
和ApplesController
)
我尝试了: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}})
答案 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
,但仍使用相同的控制器/操作。