2010-01-26 49 views

回答

0

是不是你只需要在路线中放下users/

map.connect '/:username',...代替map.connect '/users/:username',...

1

一个非常基本的例子可能是这样的:

  • 申报与最低优先级指点的路线,以你的用户控制器的show动作
  • 修改show动作找到基于记录用户名

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)生成的链接。

2

http://example.com/users/username怎么了?使用http://example.com/username的问题是,有人可以很容易地注册用户名adminfaq,这可能与您的其他路线冲突。您需要保留禁止的用户名列表,并且您需要在创建新路由之前检查用户是否存在具有给定名称的用户名,因为这可能与现有用户冲突。您可以将它缩短为:http://example.com/u/username

但是,如果您必须这样做,您可以按其他人的建议使用map.connect,但您绝对应该考虑利弊,以及是否增加任何重要价值。

+0

为了公平起见,你应该总是有一个用户名黑名单,因为名为管理员或网站管理员的用户是不好的,不管不管与路线冲突。 – srboisvert 2010-01-26 17:17:52

+0

是的,但我在这里找到了这个解决方案http://henrik.nyh.se/2008/10/validating-slugs-against-existing-routes-in-rails 我想我会用这个解决方案。 – Autodidact 2010-01-27 14:18:03

+0

我很高兴你找到了适合你的东西。确保何时引入新的路线进行反向检查。 – jonnii 2010-01-27 14:36:26

相关问题