将标题添加到rails路由

时间:2010-03-09 16:32:18

标签: ruby-on-rails routing url-rewriting

我有List对象,如下所示:

www.mysite.com/lists/123

其中123是列表的id。我想要做的是添加列表标题的网址,以便它提供更多信息(谷歌或其他)。所以我希望它看起来像:

www.mysite.com/lists/123/title-of-list-number-123

你如何添加这样的网址?如果您只输入: www.mysite.com/lists/123 w / o标题,是否找到标题,然后重定向到新路线?

3 个答案:

答案 0 :(得分:6)

如果你想保持你的发现呼叫(通过id),你可以做与mplacona建议相反的事情:

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

有了这个,你的find(params [:id])将起作用,因为它会将字符串转换为整数(只有在数字位于字符串的开头时才能成功)。所以这实际上会起作用:

List.find("123-my-title")

将与

相同
List.find(123)

在此处详细了解此操作以及其他方法:http://gregmoreno.ca/how-to-create-google-friendly-urls-in-rails/

参数化会自动将字符串转换为“漂亮”的网址。在此处阅读更多内容:http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/String/Inflections.html#M001367

如果你想要更多功能,我会建议friendly_id

答案 1 :(得分:2)

本文准确说明了您需要做的事情。

http://railscasts.com/episodes/63-model-name-in-url

<强>更新

将固定链接添加到您的模型中,并保存如下:

def to_param
  "#{permalink}-#{id}"
end

在你的控制器上,不是通过id获取内容,而是通过pemalink获取它们:

@product = Product.find_by_permalink(params[:id])

这就是你所需要的。

屏幕演示解释了如何执行此操作的所有步骤。

答案 2 :(得分:1)

如果您对某个宝石/插件有兴趣,也可以查看friendly id