参数错误的路线

routes with wrong params

我有以下路线:

resources :users, only: [] do
  resources :events, only: %i[index]
  delete :close_account, on: :member
end

出于某种原因,它生成具有不同参数的路由:

       GET      /backoffice/users/:user_id/events(.:format)               backoffice/events#index
       DELETE   /backoffice/users/:id/close_account(.:format)             backoffice/users#close_account

在一个路由中,参数是user_id,下面的路由是id。我希望两者都是 user_id,所以我添加了 resources :users, param: :user_id

现在的路线比以前更奇怪了:

      GET      /backoffice/users/:user_user_id/events(.:format)          backoffice/events#index
      DELETE   /backoffice/users/:user_id/close_account(.:format)        backoffice/users#close_account

如何修复这条路线,使两条路线具有相同的参数?

参数不是"wrong"。您看到此行为的原因是 id 参数名称在这里保留给最内层的资源。也就是说,如果您的 EventsController 除了 index 之外还有一些其他操作,它将收到事件 ID 作为 id,而相关的 User ID 将是 user_id .另一个路由不是嵌套资源,因此不需要不同的前缀。

这个可以在Rails guides section on nested resources.

中看到

话虽这么说,如果您真的希望两者都被称为 user_id,您应该使用

delete "/backoffice/users/:user_id/close_account/", to: "backoffice/users#close_account"