Ruby on Rails:在资源路由上使用slug而不是id

sid*_*eks 9 ruby routes ruby-on-rails ruby-on-rails-3

所以我正在寻找一个可以帮助我实现以下Rails资源的解决方案:

/admin/articles/:slug/edit
Run Code Online (Sandbox Code Playgroud)

而不是

/admin/articles/:id/edit
Run Code Online (Sandbox Code Playgroud)

我正在寻找Rails 资源路由而不是其他类型的路由.

只是想知道是否有可能.如果是这样,怎么样?

Tho*_*emm 23

# config/routes.rb
resources :articles, param: :slug
Run Code Online (Sandbox Code Playgroud)

在终端:

$ rake routes
...
article GET    /articles/:slug(.:format)      articles#show
...
Run Code Online (Sandbox Code Playgroud)


Sim*_*tti 10

:id路由中的参数只是一个占位符,可以是任何东西,从数字标识符到slug.

你只需要传递正确的值

article_path(id: @article.slug)
Run Code Online (Sandbox Code Playgroud)

并使用适当的方法获取文章

Article.find_by!(slug: params[:id])
Run Code Online (Sandbox Code Playgroud)

如果你愿意,你也可以覆盖to_paramArticle模型返回蛞蝓,这样就可以使用

article_path(@article)
Run Code Online (Sandbox Code Playgroud)

并自动将slug分配给:id参数.