我已經看到和谷歌搜索,並發現許多漂亮的網址鏈接。如何設置github.com像用戶名url?
但他們似乎都像http://example.com/users/username
我希望它像GitHub的風格http://example.com/username
,我可以按照任何方向?
我已經看到和谷歌搜索,並發現許多漂亮的網址鏈接。如何設置github.com像用戶名url?
但他們似乎都像http://example.com/users/username
我希望它像GitHub的風格http://example.com/username
,我可以按照任何方向?
是不是你只需要在路線中放下users/
?
map.connect '/:username',...
代替map.connect '/users/:username',...
一個非常基本的例子可能是這樣的:
在config/routes.rb
:
map.username '/:username', :controller => :users, :action => :show
在UsersController
:
def show
@name = Name.find_by_name(params[:username]) || Name.find(params[:id])
end
然後可以使用username_path(:username => user.name)
生成的鏈接。
http://example.com/users/username怎麼了?使用http://example.com/username的問題是,有人可以很容易地註冊用戶名admin
或faq
,這可能與您的其他路線衝突。您需要保留禁止的用戶名列表,並且您需要在創建新路由之前檢查用戶是否存在具有給定名稱的用戶名,因爲這可能與現有用戶衝突。您可以將它縮短爲:http://example.com/u/username。
但是,如果您必須這樣做,您可以按其他人的建議使用map.connect
,但您絕對應該考慮利弊,以及是否增加任何重要價值。
爲了公平起見,你應該總是有一個用戶名黑名單,因爲名爲管理員或網站管理員的用戶是不好的,不管不管與路線衝突。 – srboisvert 2010-01-26 17:17:52
是的,但我在這裏找到了這個解決方案http://henrik.nyh.se/2008/10/validating-slugs-against-existing-routes-in-rails 我想我會用這個解決方案。 – Autodidact 2010-01-27 14:18:03
我很高興你找到了適合你的東西。確保何時引入新的路線進行反向檢查。 – jonnii 2010-01-27 14:36:26