1

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

使用匹配规则,我可以使上面的 URL 更短:

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

请允许我做 web.com/u/johnweb.com/a/articles-name

但以最好的方式,我想让 URL 更短且更具可读性,就像这样(这种方式使用例如 Twitter - twitter.com/usernameweb.com/johnweb.com/articles-name

但我无法想象,如何实现这种路由方式。在应用程序中还使用了另一个控制器,例如HomeController与 action indexaboutcontact

4

2 回答 2

1

前段时间我想知道同样的事情,并在路由指南中找到了答案。

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

1) 第一步是覆盖to_param模型中的方法以获得更漂亮的 URL。以这个问题为例。你也可以使用像 FriendlyId 这样的 gem(看看这个截屏视频)。

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

resources :posts, :path => "/"
于 2012-06-01T11:27:18.770 回答
1

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

match '*users_or_articles' => 'agnostic#show'

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

于 2012-06-01T11:29:22.230 回答