我有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标题,是否找到标题,然后重定向到新路线?
答案 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。