2012-01-02 23 views
0

我想去做twitter.com做(和許多其他網站做),給我的用戶喜歡的網址:路由的用戶名關根URL,防止碰撞

http://mysite.com/theirusername

目前,我的一個用戶模型驗證僅僅拒絕硬編碼列表中列入黑名單的用戶名。

有沒有比硬編碼列表更好的方法來做到這一點?例如檢查路線(代碼示例?)

任何經營此類網站的人的智慧言論都將受到重視!我相信您一定遇到了想要使用某個新功能的網址的情況,但有人將其用作其用戶名。有沒有經常出現,有什麼辦法來處理它?您可以隨時選擇其他名稱,使用子域名,或者讓用戶重新命名我猜。也許將一些常見的英語名詞加入黑名單是值得的?任何其他?

回答

1

使用此:

get ':id', :to => "users#show" 

然後,你可以做這樣的事情http://mysite.com/theirusername。在UsersController#show動作中,您需要使用User.find_by_username(params[:id])

如果某人已經在使用您將來要使用的用戶名,請向他們發送一封電子郵件,通知他們有關更改(您的條款和條件中也應該有相應的內容)並給他們一段時間時間做出改變。

您應該瞄準有一些黑名單功能,這很容易與User型號中的單詞列表相匹配,然後使用validates_exclusion_of進行檢查。

+0

嗨,謝謝我實際上已經有這項工作很抱歉,如果不清楚。我的問題更多的是圍繞路線直接驗證用戶名(而不是硬編碼列表),以及防止和處理我可能希望在將來添加的URL衝突的策略。 – poochenza 2012-01-02 22:33:53

+0

@poochenza:更新。 – 2012-01-02 23:01:29

+0

對不起,我一定會問這個問題。我試圖問如何從路線動態建立黑名單,而不是維護一個恆定的列表。我實際上已經使用validates_exclusion_of和一個靜態列表。謝謝你的幫助。我問了一個希望更明確的問題在這裏http://stackoverflow.com/questions/8706329/rails-validatation-to-ensure-a-username-does-not-clash-with-an-existing-route – poochenza 2012-01-02 23:24:17