将标题添加到rails路由

我有List对象,如下所示:

www.mysite.com/lists/123

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

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

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

如果你想保持你的发现呼叫(通过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/

参数化将自动将字符串转换为“漂亮”的URL。 点击此处了解更多信息: http : //api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/String/Inflections.html#M001367

如果你想要更多的function,我会建议friendly_id 。

本文准确说明了您需要完成的任务。

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

UPDATE

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

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

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

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

这就是你所需要的一切。

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

如果您有兴趣获得gem/插件,您还可以查看友好ID 。