在Rails中硬编码路由

3

假设我有以下这段代码:

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

在我的 page.rb 文件中,我想通过永久链接来显示 URL,因此我使用标准代码:

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

现在当我点击“我的大链接”时,它会带我去正确的页面,但是地址栏中的URL并没有显示想要的永久链接。相反,它只显示了标准链接:
wwww.mysite.com/pages/4 

这是因为我在页面路径中硬编码了一个id吗?如果我使用纯html,它也不起作用。
<a href="/pages/4">My Big Link</a>

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

3个回答

5

只需使用page_path(page)。我猜测路径辅助方法不会直接访问数据库(这很好),但如果它们被提供了一个对象,并且该对象具有to_param方法,则使用此方法来生成标识符。

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

2
这是因为您指定了ID:
page_path(:id => 4)

您可以在此方法中指定您想要的路径:
page_path(:id => "#{id}-#{title.parameterize}")

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

嗨Toby,是的,它在page.rb中。我仍然不清楚为什么指定:id不会获取该:id并调用page.rb中的to_param方法? - drpepper
其实我能理解为什么,我想我更在寻找一种解决方法 :) - drpepper

-1

我的问题更新如下 ---------------------->

感谢大家的回答。这是一个比较特殊的情况。我的解决方案是简单地使用HTML:

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

这将产生所需的结果:

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

我不想循环遍历页面对象并为这个链接浪费一次数据库调用。非常感谢所有的答案!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接