2013-03-28 82 views
0

在我的應用程序,我需要爲我的所有用戶都喜歡個性化網址動態路由: PROFILENAME/joinme,其中配置文件名稱將是獨一無二的。 有一個問題,如果配置文件名是一樣,如果一個已經存在的路線: PROFILE_NAME =用戶,那麼路徑將是用戶/ joinme並且已經有一個名爲用戶的資源。 所以我想檢查一下這些虛榮URL的創建,他們不會干擾我現有的路線。 有沒有簡單的方法來做到這一點? 一個,我能想到的辦法是讓「回扣路線」的格式輸出文件,然後爲上創造的每路線的生存確認。,如何檢查是否路由已經存在而產生的軌道

回答

1

代替生成動態路由,可以在路由使用動態段。

例如:

match ":username/joinme", :to => "users#joinme" 

然後,你可以自定義控制器的行爲,只要你想。

對於參考: Rails Routes - Dynamic Segments


另外,如果你想控制創建新用戶,禁止那些在衝突與現有的路線名稱的使用過程中,你可以使用的方法描述在this answer

+0

這是一個不錯的和有趣的建議,但我想它目前不能解決我的目的,例如: 用戶的個人資料名稱是:登錄 他的虛榮網址:mywebsite.com/login 這干擾了路線:mywebsite。 com/login 我基本上想要這樣做 – 2013-03-28 11:08:27

+1

我以爲你的問題是關於路由級別的。如果是有關用戶模型驗證,它可能http://stackoverflow.com/questions/9913064/how-can-you-make-sure-a-username-wont-conflict-with-an-existing-route的副本。檢查它,它可能正是你想要的。 – Flexoid 2013-03-28 11:35:24

+0

完美這正是我想要的,謝謝。你可以編輯你的答案,以便我可以將它標記爲已接受的答案。 – 2013-03-28 11:42:54

3

您應該創建的屏蔽詞列表,並檢查用戶名不符合任何使用驗證這句話。一個簡單的方法可以是:

validate :check_banned_words 

def check_banned_words 
    if %w(admin join login help register).include? self.username 
    errors.add(:username, "this is a banned word!!") 
    end 
end 

如果禁用詞列表太長,把它變成一個YAML文件,或創建一個模型只是禁止的話,這樣,你就可以添加新詞,而不重新部署應用

+0

它會工作,「創建一個模型只是禁止的話」實際上將解決我所有的問題。謝謝 我仍然想等待某個時候接受這個答案,因爲有人給我一些魔術出鐵路線助手 – 2013-03-28 11:12:19