我希望我的rails网址看起来像:
/posts/345/the-great-concept
当我在帖子模型中使用以下内容时,
def to_param
"#{id}/#{name.parameterize.downcase}"
end
网址在浏览器中看起来很棒。并且功能正常。但是,一旦页面加载到浏览器URL中,它看起来像:
/posts/345%2Fthe-great-concept
并且要清楚,“名称”只是为了好看 - 帖子只能通过id检索。我也不想使用数据库slug方法。
我该如何更好地接近这个?
PS。不想要“/ posts / 345-the-great-concept”......
答案 0 :(得分:4)
它逃脱了,因为它不是路径的一部分,而是一个参数,所以它需要被逃脱,否则你将会出错。
def to_param
"#{id}-#{name.parameterize.downcase}"
end
编辑:好的,所以斜线确实很重要;以下是解决问题的方法:
为此创建自定义路线:
# in config/routes.rb
resources :posts
match '/posts/:id/:slug' => 'posts#show', :as => :slug
然后创建你的slug方法:
# in app/models/post.rb
def slug
title.parameterize.downcase
end
然后将您的路线更改为show动作,以便链接到花哨的网址:
# in any link to show; redirect after create, etc..
link_to slug_path(@post, :slug => @post.slug)
我创建了一个应用来测试所有这些,如果有兴趣,你可以查看: https://github.com/unixmonkey/Pretty-Path