【问题标题】:How to rename REST routes in URL?如何重命名 URL 中的 REST 路由?
【发布时间】:2011-06-28 02:08:28
【问题描述】:

假设我有一个名为 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”替换。因此,URL /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"}

但这只是改变了路由的“名称”,而不是 URL(所以new_apple_path 变成了new_car_path,但new_car_path 仍然指向/apples/new 而不是/cars/new

【问题讨论】:

    标签: ruby-on-rails-3 routes


    【解决方案1】:

    您要做的是传入:path 选项

    resources :apples, :path => "cars"

    这会将您的所有路由引用替换为/apples/cars

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

    【讨论】:

    • 为了完整起见,在 Rails 2.3 中应该是:resources :apples, :as => "cars"
    • 我是 Rails (4) 的新手,但只更改了路线助手。生成的 URL 不会改变。 :path => "xxx" 改变 URLs
    【解决方案2】:

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

    resources :apples, as: "cars"
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多