我已经看到和谷歌搜索,并发现许多漂亮的网址链接。如何设置github.com像用户名url?
但他们似乎都像http://example.com/users/username
我希望它像GitHub的风格http://example.com/username
,我可以按照任何方向?
我已经看到和谷歌搜索,并发现许多漂亮的网址链接。如何设置github.com像用户名url?
但他们似乎都像http://example.com/users/username
我希望它像GitHub的风格http://example.com/username
,我可以按照任何方向?
是不是你只需要在路线中放下users/
?
map.connect '/:username',...
代替map.connect '/users/:username',...
一个非常基本的例子可能是这样的:
在config/routes.rb
:
map.username '/:username', :controller => :users, :action => :show
在UsersController
:
def show
@name = Name.find_by_name(params[:username]) || Name.find(params[:id])
end
然后可以使用username_path(:username => user.name)
生成的链接。
http://example.com/users/username怎么了?使用http://example.com/username的问题是,有人可以很容易地注册用户名admin
或faq
,这可能与您的其他路线冲突。您需要保留禁止的用户名列表,并且您需要在创建新路由之前检查用户是否存在具有给定名称的用户名,因为这可能与现有用户冲突。您可以将它缩短为:http://example.com/u/username。
但是,如果您必须这样做,您可以按其他人的建议使用map.connect
,但您绝对应该考虑利弊,以及是否增加任何重要价值。
为了公平起见,你应该总是有一个用户名黑名单,因为名为管理员或网站管理员的用户是不好的,不管不管与路线冲突。 – srboisvert 2010-01-26 17:17:52
是的,但我在这里找到了这个解决方案http://henrik.nyh.se/2008/10/validating-slugs-against-existing-routes-in-rails 我想我会用这个解决方案。 – Autodidact 2010-01-27 14:18:03
我很高兴你找到了适合你的东西。确保何时引入新的路线进行反向检查。 – jonnii 2010-01-27 14:36:26