在Ruby on Rails项目中,用户名网址如Twitter,FriendFeed,Facebook等

时间:2009-10-31 11:03:16

标签: ruby-on-rails

我正在考虑为一个新项目定义Restful urls(使用Ruby On Rails开发)。 我喜欢最着名的web 2.0服务的简单和干净的网址,如“twitter.com/username”。不是在谈论路由配置中的问题(我想用不使用脏“map.connect”覆盖的资源来实现),问题是:如何保留您想要用于页面的单词(例如:website.com/帮助,website.com / api等)?我不想在0时刻考虑所有的可能性(也因为它是非常不可能的)。

2 个答案:

答案 0 :(得分:3)

路线在宣布之时被优先考虑。第一个匹配的声明路由将是执行的路由。

所以如果你有:

map.resources :users
map.profile ':nickname', :controller => 'users', :action => 'show'

如果您转到/users,您将进入map.resources :users路线,因为这是第一个匹配的路线。
当您转到/zetarun时,您将被转到map.profile ':nickname', :controller => 'users', :action => 'show',因为这是匹配的第一条路线。

然后,对于用户个人资料,您可以执行以下操作:

在所有控制器的路线中定义所有资源 在资源的末尾,添加用户配置文件资源。

因此,当前缀是控制器的用户时,它首先被存在的任何路由路由 并且只有未路由的URL仍然是用户配置文件。

不要忘记在用户注册时添加“保留昵称”验证,以避免有人昵称不会给他个人资料,因为该网址上还有其他内容。

答案 1 :(得分:1)

好吧,如果你想要安全起见 - 考虑所有自定义内容的单个前缀(map.with_options :prefix => 'do/'),以便所有控制器/操作都会像这样加上

http://example.com/do/:controller/:action/:whatever

所以你只需要阻止do作为用户名,并且可以自由地在该前缀后做任何你喜欢的事情。