Rails中的硬编码路由

时间:2009-10-01 02:07:25

标签: ruby-on-rails routing routes

假设我有这个:

<%= link_to "My Big Link", page_path(:id => 4) %>

在我的page.rb中,我希望通过永久链接显示网址,以便我使用标准:

 def to_param
    "#{id}-#{title.parameterize}"
 end

现在,当我点击“我的大链接”时,它会将我带到正确的页面,但地址栏中的网址不会显示所需的永久链接。相反,它只显示标准:

wwww.mysite.com/pages/4 

这是因为我将id硬编码到page_path中吗?如果我使用直接的html,它也无效。

<a href="/pages/4">My Big Link</a>

如果有人能够验证这种相同的行为并且让我知道这是否有意,我将不胜感激。我需要硬编码的能力:id来指定确切的页面......

3 个答案:

答案 0 :(得分:5)

只需使用page_path(页面)。我猜路径助手本身不访问数据库(这很好),但是如果它们被提供了一个对象,并且该对象有一个to_param方法,则该方法用于生成标识符。

<%= link_to "My Big Link", page_path(page) %>

答案 1 :(得分:1)

这是因为您指定了id:

page_path(:id => 4)

您可以在此方法中指定所需的路径:

page_path(:id => "#{id}-#{title.parameterize}")

你在哪里定义了to_param方法?在模型中?

答案 2 :(得分:-1)

更新我的问题----------------------&gt;

谢谢大家的答案。这是一种一次性的情况。我的解决方案是简单地使用html:

<a href="/pages/4-great-title-here">My Big Link</a>

产生了所需的:

wwww.mysite.com/pages/4-great-title-here

我不想遍历页面对象并浪费对这个链接的数据库调用。尽管如此,对所有答案都非常赞赏!