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

Posted

技术标签:

【中文标题】Rails 路由:如何重命名(嵌套)资源块中的 params-Hash 键?【英文标题】:Rails Routing: How to rename the params-Hash keys in a (nested) resource block? 【发布时间】:2021-07-26 01:03:14 【问题描述】:

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

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

因此,对于 show-action,关键不是/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 会非常耗费工作!

谢谢

冯·斯波茨

【问题讨论】:

【参考方案1】:

嘿——你可以这样做的一个好方法是

# config/routes.rb

resources :pages, param: :slug

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

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

以上是关于Rails 路由:如何重命名(嵌套)资源块中的 params-Hash 键?的主要内容,如果未能解决你的问题,请参考以下文章

Rails 不区分嵌套在相同命名空间中的两个资源

如何更新脚手架生成的 MVC + 路由,用于在 Rails 中具有 2 个 belongs_to 关系的嵌套资源

Rails 命名空间与嵌套资源

Rails 3 link_to 路由(编辑)嵌套资源

如何编写迁移以重命名 Rails 中的 ActiveRecord 模型及其表?

Rails 5,具有命名空间资源的Pundit