2011-04-10 174 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