Ruby on rails路由匹配用户名

时间:2011-04-10 12:14:13

标签: ruby-on-rails ruby

我确信这有一个简单的解决方案,但我似乎无法找到它。

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

 /users/dymanicUsername

在routes.rb中看起来如何?

感谢您的帮助。

2 个答案:

答案 0 :(得分:5)

奥利斯特,

要做到这一点,只需覆盖模型中的to_param即可。例如:

#users.rb

def to_param
  self.username
end

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

  • 与现有路线冲突。例如,用户名不应该是“新的”,得到它?
  • 为了在控制器中提取用户,你应该在你的模型中创建一个方法(这就是我所做的,可能不是最好的解决方案),就像这个self.find_for_controller(用户名)
  • 您的用户名只包含支持网址的字符(忘记重音符号,ponctuations等...)。对此的解决方案是使用第二个属性名称username_urlized,当然应该是唯一的且不与其他路由冲突

也许还有更多问题:)

此外,如果您需要twitter(yoursite.com/dynamicUserName)之类的内容,请在routes.rb中执行以下操作:

resources :users, :path=>'' do

答案 1 :(得分:1)

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

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

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