Rails 5:如何覆盖额外成员路由的路由参数

Jav*_*ish 1 ruby routing routes ruby-on-rails ruby-on-rails-5

在Rails 5中,我已经找到了解决方法

  1. 覆盖路由参数id到类似的东西name
  2. 为资源添加另一个路由

所以我的routes.rb看起来像这样

Rails.application.routes.draw do

  resources :cats, param: :name

  resources :cats do
    get :preview, on: :member
  end

end
Run Code Online (Sandbox Code Playgroud)

但是我注意到我的附加preview路由没有保留覆盖的命名路由参数.相反,当查看rake路由的输出时,我有一些看起来像这样的东西.

GET /cats/:id/preview(.:format)

当我期待并试图实现的是一条看起来像的路线

GET /cats/:name/preview(.:format)

如何额外的路由添加到资源,同时覆盖参数?

Ric*_*yon 6

您正在为您的路由条目复制cats,并且您已经提供了用于preview在条目上声明路径的块,而该路径缺少param名称覆盖.您需要在同一路由声明中提供覆盖和块.

Rails.application.routes.draw do

  resources :cats, param: :name do
    get :preview, on: :member
  end
end
Run Code Online (Sandbox Code Playgroud)

这为您提供了您想要的路线:

$ rake routes
           Prefix Verb   URI Pattern                      Controller#Action
      preview_cat GET    /cats/:name/preview(.:format)    cats#preview
Run Code Online (Sandbox Code Playgroud)