Ruby on rails路由匹配用户名

All*_*ter 2 ruby ruby-on-rails

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

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

 /users/dymanicUsername
Run Code Online (Sandbox Code Playgroud)

这怎么看在routes.rb

谢谢你的帮助.

Mar*_*ere 5

阿利斯特,

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

#users.rb

def to_param
  self.username
end
Run Code Online (Sandbox Code Playgroud)

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

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

也许更多的问题:)

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

resources :users, :path=>'' do
Run Code Online (Sandbox Code Playgroud)