0

我尝试link_to像这样使用:

<%= link_to post.title, {:controller => 'posts', :action => 'show', :id => post.title}, :title => post.title %>

如果标题包含句点 (.),我会收到以下错误:

No route matches {:controller=>"posts", :action=>"show", :id=>"test.title"}

但如果不包括期间,一切正常。

谁能帮我?

我找到了解决方案。http://www.ruby-forum.com/topic/101911#222985

4

3 回答 3

1

您链接的解决方案是最糟糕的解决方案。覆盖导轨内部以适应您的问题是错误的。我宁愿使用名为 的 gem friendly_id,这将根据您的 id 创建一个 url proof slug。它易于设置和使用。

https://github.com/norman/friendly_id

于 2011-04-11T14:24:47.353 回答
1

问题是:title => post.title 尝试在其中使用 post 对象。

link_to post.title, :controller => 'posts', :action => 'show', :id => post

甚至更好

link_to post.title, post
于 2011-04-11T04:47:45.900 回答
0

它认为在路由中它期望格式为“.title”并且尚未配置。因为你的路由看起来像这样“/posts/test.title”,你能不能不使用“/posts/test-title”,因为这对于大多数网络服务器来说是一个更好的 url 结构?

如果你确实需要破解它,在 rails 2 中你可以像这样使用 ":requirements" 选项:

map.connect '/post/:id/:title', :controller => 'forum', :action => 'show_post', :requirements => { :title => /.*/ }

于 2011-04-11T04:51:33.830 回答