自定义Rails路由查询

时间:2010-05-20 20:51:24

标签: ruby-on-rails

我正在为我正在处理的应用程序整理一个简短的URL功能,现在让它工作,并通过base36编码指向更长URL的记录的ID,将更长的URL转换为短URL,例如:

http://localhost:3000/7ps - > http://localhost:3000/the/long/url

我正在努力编写一条路线,拦截对短网址的请求,同时仍然允许在应用中请求其他有效网址。

我可以使用的路由只会定位域后的base36编码值吗?

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

您可以添加:

map.encoded ":encoded_url", :controller => :encoded_urls, :action => :please_decode_me

在路线的尽头。然后它会抓住其他路线没有捕获的所有东西。

答案 1 :(得分:1)

简短的回答是“这取决于”。您可以在路径文件末尾添加路径作为全能。但是,如果您有任何一个字长的实际路线,这最终会失败。

例如:如果您的路径看起来像http://localhost:3000/home那么?是home页面还是对象#825062的短URL?您的应用中的任何单字路径都会出现此问题。

一个非常简单的方法是添加一个字符作为URI中的第一个目录。

http://localhost:3000/r/abc123

或者你想要的任何字母。然后,您可以轻松地将以/ r /开头的任何内容映射到短URL查找控制器。

map.connect "/r/:short_url", :controller => "controller_name", :action => "name_of_action_that_looks_up_short_urls"