link_to并没有路由匹配问题

时间:2011-04-11 04:22:02

标签: ruby-on-rails link-to

我尝试使用link_to,如此:

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

如果title包含句点(。),则会出现以下错误:

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

但如果不包括任何时期,一切都会奏效。

任何人都可以帮助我吗?

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

3 个答案:

答案 0 :(得分:1)

问题是:title => post.title请尝试在那里使用post对象。

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

甚至更好

link_to post.title, post

答案 1 :(得分:1)

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

https://github.com/norman/friendly_id

答案 2 :(得分:0)

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

如果您确实需要破解它,在rails 2中您可以使用“:requirements”选项,如下所示:

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