2010-01-26 105 views

回答

0

是不是你只需要在路線中放下users/

map.connect '/:username',...代替map.connect '/users/:username',...

1

一個非常基本的例子可能是這樣的:

  • 申報與最低優先級指點的路線,以你的用戶控制器的show動作
  • 修改show動作找到基於記錄用戶名

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)生成的鏈接。

2

http://example.com/users/username怎麼了?使用http://example.com/username的問題是,有人可以很容易地註冊用戶名adminfaq,這可能與您的其他路線衝突。您需要保留禁止的用戶名列表,並且您需要在創建新路由之前檢查用戶是否存在具有給定名稱的用戶名,因爲這可能與現有用戶衝突。您可以將它縮短爲:http://example.com/u/username

但是,如果您必須這樣做,您可以按其他人的建議使用map.connect,但您絕對應該考慮利弊,以及是否增加任何重要價值。

+0

爲了公平起見,你應該總是有一個用戶名黑名單,因爲名爲管理員或網站管理員的用戶是不好的,不管不管與路線衝突。 – srboisvert 2010-01-26 17:17:52

+0

是的,但我在這裏找到了這個解決方案http://henrik.nyh.se/2008/10/validating-slugs-against-existing-routes-in-rails 我想我會用這個解決方案。 – Autodidact 2010-01-27 14:18:03

+0

我很高興你找到了適合你的東西。確保何時引入新的路線進行反向檢查。 – jonnii 2010-01-27 14:36:26

相關問題