Ruby on Rails:在资源路由上使用 slug 而不是 id
Ruby on Rails: Use slug instead of id on resource routes
所以我正在寻找一种解决方案,可以帮助我使用 Rails 资源实现以下目标:
/admin/articles/:slug/edit
相对于
/admin/articles/:id/edit
我正在寻找 Rails resource routes 而不是其他类型的路线。
只是想知道这是否可能。如果是这样,如何?
# config/routes.rb
resources :articles, param: :slug
在终端中:
$ rake routes
...
article GET /articles/:slug(.:format) articles#show
...
路由中的 :id
参数只是一个占位符,可以是任何东西,从数字标识符到 slug。
你只需要传递正确的值
article_path(id: @article.slug)
并使用适当的方法获取文章
Article.find_by!(slug: params[:id])
如果您愿意,您还可以将 Article
模型的 to_param
覆盖为 return slug,这样您就可以使用
article_path(@article)
然后自动将 slug 分配给 :id
参数。
所以我正在寻找一种解决方案,可以帮助我使用 Rails 资源实现以下目标:
/admin/articles/:slug/edit
相对于
/admin/articles/:id/edit
我正在寻找 Rails resource routes 而不是其他类型的路线。
只是想知道这是否可能。如果是这样,如何?
# config/routes.rb
resources :articles, param: :slug
在终端中:
$ rake routes
...
article GET /articles/:slug(.:format) articles#show
...
路由中的 :id
参数只是一个占位符,可以是任何东西,从数字标识符到 slug。
你只需要传递正确的值
article_path(id: @article.slug)
并使用适当的方法获取文章
Article.find_by!(slug: params[:id])
如果您愿意,您还可以将 Article
模型的 to_param
覆盖为 return slug,这样您就可以使用
article_path(@article)
然后自动将 slug 分配给 :id
参数。