Rails在不使用链接ID的情况下匹配带有slugs的路由

med*_*rts 4 routes slug ruby-on-rails-3

在我的路线文件中,我可以很容易地组合一个看起来像这样的匹配并且工作得很好

match '/:slug/:id' => "pages#show", :id => :id
Run Code Online (Sandbox Code Playgroud)

视图中的链接是这样的

link_to n.name, "/" + n.slug + "/" + n.id.to_s
Run Code Online (Sandbox Code Playgroud)

我宁愿不在URL中包含ID号,所以我希望做类似的事情

match '/:slug' => "pages#show", :slug => :slug
Run Code Online (Sandbox Code Playgroud)

但问题是这并没有向显示控制器的页面提供id.有没有办法使用:slug将它与数据库中的页面匹配,使用此slug查找:id所以我可以将:id传递给控制器​​?

小智 6

在您的路线中使用此

match "/:slug" => "pages#show"
Run Code Online (Sandbox Code Playgroud)

在你的控制器中使用slug找到页面

@page = Page.find_by_slug(params[:slug])
Run Code Online (Sandbox Code Playgroud)