有错误参数的路线

时间:2017-08-17 10:01:38

标签: ruby-on-rails ruby-on-rails-4.2

我有以下路线:

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

如何以两条路线具有相同参数的方式修复此路线?

1 个答案:

答案 0 :(得分:2)

参数不是"错误"。您看到此行为的原因是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"