Rails 路由:如何重命名(嵌套)资源块中的 params-Hash 键?

Rails Routing: How to rename the params-Hash keys in a (nested) resource block?

有没有办法重命名资源块中资源的密钥?我的页面路由如下所示

get ':slug', to: 'pages#show', as: :pages
resources :pages

因此对于表演动作,关键不是 /pages/:id,而是 /pages/:slug,如此处所述 https://guides.rubyonrails.org/routing.html#naming-routes

有没有办法将所有 /pages/* 路由的参数键更改为 :slug 而不是 :id

特别是:这在嵌套资源块中可能吗?

例如:

resources :users do
  resources :products do (should be params[:product_id] instead of params[:id])
    resources :comments (should be params[:comment_id] instead of params[:id])
    end
  end
end

手动设置所有路由只是为了更改该资源的 params-key 会非常费力!

谢谢

冯·斯波茨

嘿 - 一个很好的方法是

# config/routes.rb

resources :pages, param: :slug

您可以在这里阅读更多相关信息:https://guides.rubyonrails.org/routing.html#overriding-named-route-parameters

另一种选择是明确提供路线名称:

put 'pages/:some_other_name_for_the_id', action: :do_something, as: :route_name

使用 param: 选项(由 Damilare 提到)绝对是首选,如果它适用于您的用例。