我在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>
答案 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
文件的末尾。这将捕获到目前为止在路由文件中找不到匹配项的所有请求。然后你的控制器必须确定如何处理请求。