假设我有一个名为Apple
的模型,并且有一个 Controller 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”之外。因此,URL
/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"}
但这仅更改了路由的“名称”,而不更改了URL(因此
new_apple_path
变为new_car_path
,但new_car_path
仍指向/apples/new
而不是/cars/new
)
最佳答案
您要做的就是传递:path
选项resources :apples, :path => "cars"
这会将您所有的路线引用替换为/apples
到/cars
请参阅:http://guides.rubyonrails.org/routing.html,第4.7节翻译路径
关于ruby-on-rails-3 - 如何在URL中重命名REST路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5012255/