Rails的比赛路线蛞蝓没有链接使用ID(Rails match routes with slugs

2019-09-19 03:57发布

在我的路线文件,我可以很容易地放在一起比赛,看起来像这样和工作得很好

match '/:slug/:id' => "pages#show", :id => :id

在视图中的链接,这个工程是

link_to n.name, "/" + n.slug + "/" + n.id.to_s

我不想在URL中包含的ID号,所以我希望做这样的事情

match '/:slug' => "pages#show", :slug => :slug

但问题是,这并不提供ID给页面显示控制器。 有没有使用的一些方法:蛞蝓匹配到与本塞寻找数据库中的网页:身份证,所以我可以通过:ID控制器?

Answer 1:

在你的路由使用

match "/:slug" => "pages#show"

而在你的控制器使用此一决高下找到页面

@page = Page.find_by_slug(params[:slug])


Answer 2:

看看https://github.com/norman/friendly_id宝石,它简化了蛞蝓路由很多。



Answer 3:

你也可以这样做:

resources :pages, only: :show, param: :slug

这将产生

页面GET /pages/:slug/(.:format)页#秀

我为了能够使用这个助手是这样的: page_path(page) ,在页面的一个实例Page ,您还需要重写to_param方法如下所示:

def to_param
  slug
end


文章来源: Rails match routes with slugs without using ID in link