2012-12-03 41 views
1

我試圖讓用戶通過他們的用戶名訪問他們的賬戶,而不管他們如何在URL中對其進行大寫。因此http://example.com/Username將與http://example.com/username一樣到達相同的頁面。Rails 3路由中不區分大小寫的用戶名

我很好,URL的任何其他部分區分大小寫(我知道這是標準),但我沒有看到有必要強制用戶在URL中獲得正確的用戶名。

這可以通過單獨在routes.rb文件中添加某些設置來完成嗎?

我認爲這將是直截了當的,但顯然它不是。

我發現了一個看似簡單的問題here但只有one answer that I think will help和它太哈克(由作者自己也承認)

+0

爲什麼這是一個路由問題? –

回答

5

我相信這不是一個路由的問題,你可以在你的控制器代碼解決這個問題:

User.where("lower(username) = lower(?)", params[:username]).first! 

User.where("lower(username) = ?", params[:username].downcase).first! 

User.find(:first, :conditions => [ "lower(username) = ?", params[:username].downcase ]) 
+0

謝謝。我沒有仔細查看我收到的錯誤消息,只是(愚蠢而懶惰地)認爲錯誤發生在路由中。比較小寫版本的用戶名確實有效。 – bergie3000

1

它應該工作的罰款來處理這種行爲在控制器,而不是在路線。

# config/routes.rb 
match ':username' => 'users#show' 

# app/controllers/users_controller.rb 
def show 
    username = params[:username] 
    user = User.find_by_username(username) || User.find_by_username(username.downcase) 
    # or something along these lines... 
end 

一個更美好的解決方案可能是存儲某種蛞蝓鑑定,就是始終downcased並準備要在URL中使用的用戶。你可以看看那個真棒friendly_id gem

+0

謝謝......你的回答非常好,只是沒有@ john-nagle那麼快。 – bergie3000