我有以下路线:
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
型
我如何修复这个路由,使两个路由都有相同的参数?
2条答案
按热度按时间snvhrwxg1#
参数没有“错误”。您看到此行为的原因是
id
参数名称在这里保留给最里面的资源。也就是说,如果您的EventsController
除了index
之外还有其他操作,它将接收事件ID为id
,而相关的User
ID将是user_id
。其他路由不是嵌套资源,因此不需要不同的前缀。这可以在Rails指南中关于嵌套资源的部分看到。
也就是说,如果您真的希望两者都被称为
user_id
,则应该使用字符串
mfuanj7w2#
我同意,这绝对是令人困惑的。利用Rails插装的最简单的解决方案是使用资源两次,一次没有指定参数名,另一次使用它:
字符串
一般情况下,
型
这将产生
型
如果你更喜欢在模块中 Package 控制器,请使用作用域。