3

我希望我的 rails url 看起来像:

/posts/345/the-great-concept

当我在我的帖子模型中使用以下内容时,

def to_param
   "#{id}/#{name.parameterize.downcase}"
end

在浏览器中鼠标悬停时,网址看起来很棒。并正常运行。但是,一旦页面在浏览器 url 中加载,它看起来像:

/posts/345%2Fthe-great-concept

需要明确的是,“名称”只是为了好看 - 帖子只能通过 id 检索。我也不想使用数据库 slug 方法。

我应该如何更好地解决这个问题?

附言。也不想要“/posts/345-the-great-concept”...

4

1 回答 1

4

它被转义是因为它不是路径的一部分,而是一个参数,所以它需要被转义,否则你会在错误的 uri 上。

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

然后将您的路线更改为显示操作,以便链接到花哨的 url:

# in any link to show; redirect after create, etc..
link_to slug_path(@post, :slug => @post.slug)

我创建了一个应用程序来测试所有这些,如果有兴趣,您可以在以下位置查看: https ://github.com/unixmonkey/Pretty-Path

于 2011-04-02T23:13:47.500 回答