如何进行“web.com/user-name”之类的URL路由

时间:2012-06-01 11:00:58

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

我在Rails 3.2中有一个基本的应用程序 - 两个主要控制器:用户文章。 基本路由类似于 web.com/users/john web.com/articles/articles-name

使用匹配规则,我可以缩短上述网址:

match "u/:permalink" => "users#my_action_name"
match "a/:permalink" => "articles#my_action_name"

请允许我这样做 web.com/u/john web.com/a/articles-name

但最好的方式是,我想让网址更短更可读,就像这样(这种方式用于Twitter - twitter.com/username web.com/john web.com/articles-name

但我无法想象,如何实现这种路由方式。在应用程序中还使用了另一个控制器,例如 HomeController ,其中索引关于联系。< / p>

2 个答案:

答案 0 :(得分:1)

前段时间我想知道同样的事情,并在Routing Guide找到答案。

您的问题可以分两步回答:

1)第一步是覆盖模型中的to_param方法,以获得更漂亮的网址。看一下this question的例子。你也可以使用像FriendlyId这样的宝石(看看这个screencast)。

2)然后您必须使用:path文件中的routes.rb选项。例如,如果你想拥有像“example.com/3214-a-blog-post”这样的网址,你应该像这样声明你的资源:

resources :posts, :path => "/"

答案 1 :(得分:1)

查看官方Rails指南的“Route Globbing”部分。你需要添加像

这样的东西
match '*users_or_articles' => 'agnostic#show'

config/routes.rb文件的末尾。这将捕获到目前为止在路由文件中找不到匹配项的所有请求。然后你的控制器必须确定如何处理请求。