2011-04-10 122 views
2

我相信有一个简单的解决方案,但我似乎无法找到它。Ruby on rails路由匹配用户名

我想匹配以下动态用户名:

/users/dymanicUsername 

如何将这个看在routes.rb中

感谢您的帮助。

回答

5

阿利斯特,

为了做到这一点,只是重写to_param在模型中。例如:

#users.rb 

def to_param 
    self.username 
end 

你很快就会碰到一些问题:

  • 冲突与现有的路线。例如,用户名不应该是'新',明白了吗?
  • 用于获取您在控制器的用户,你应该创建一个方法(这就是我所做的,mayybe不是最好的解决方案)在你的模型像这样self.find_for_controller(用户名)
  • 您的用户名应只包含网址启用字符(忘记口音,水晶等)。对此的解决方案是让第二属性名称username_urlized,那当然应该是唯一的,而不是与其他路线

也许更多的问题:)

另外,如果你想要的东西,像Twitter发生冲突( yoursite.com/dynamicUserName),做routes.rb中的以下内容:

resources :users, :path=>'' do 
+0

谢谢马塞尔!它通过向模型添加to_parm方法来工作。 – Allister 2011-04-10 12:42:04

1

这是从2006年一个很好的解释,看起来好为Rails 2.3 *: http://garrickvanburen.com/archive/using-names-in-rails-routes-instead-of-ids

我看到的主要问题是,您不仅要确保Marcel提到的所有上述内容,而且要确保该名称是唯一的。即在迁移过程中将:unique => true命名为索引。

对于我刚刚升级的rails3,会以不同方式进行路由。例如map.connect被替换为match