2008-10-02 64 views
11

前提條件: 通常在準備新的Ruby on Rails應用程序時,我會繪製有關用戶導航的模型和關係。通常我會碰到一個我需要問自己的地方,我是否應該超越通常的「嵌套規則」,不超過1層。有時我覺得需要嵌套,而不是創建另一個命名空間路線和複製工作。
下面是一個例子:
巢或不巢?

型號:用戶,公司,地點
用戶擁有屬於許多公司(多對多)
用戶擁有屬於許多地方(多對多)
公司擁有屬於許多地方(多對多)

路線:
1級嵌套
用戶/:USER_ID /公司/ - 列表與用戶相關的所有公司
用戶/:USER_ID /位置/ - 列表與用戶
超過1級嵌套
用戶的所有位置/:user_id/companies /:company_id/locations/- 列出用戶的所有公司位置

所以,我的問題是在RoR中嵌套超過1層的水平是否合適?是或否?爲什麼?

回答

7

我傾向於追隨賈米斯巴克的advice,永遠不會築巢超過一層。

編輯: 如果你要嵌套超過10級我會邊檢查出shallow routes新功能

+0

FTW的淺路線。這幾乎可以肯定你想要的。 LocationsController#索引與/位置無關,因爲你永遠不需要/所有/位置。但它可讓您保留/ locations/上的所有位置,而不管它與哪種類型相關聯。 – Otto 2009-01-31 17:37:06

2
users/:user_id/companies/:company_id/locations/ 

雖然在技術上,這是好的,也不會指定路線幫手因此是

user_company_location_path(user_id, company_id, location_id) 

不得不購買輪3參數,這是令人討厭的。任何惱人的事情可能都是一面紅旗。

+0

檢查resource_controller中的smart_url:smart_url(@user,@company,@location)。但是,嵌套太深,似乎是錯誤的。 – webmat 2008-10-03 13:01:46

1

雖然它在理論上聽起來不錯,我發現嵌套多個級別可以開始會比較混亂 - 特別是如果你有不同級別的同名控制器(這是相當常見的)

user/x/blog/y/profile/z, and 
    user/x/profile/a 

我經常會發現我在不同的命名空間來什麼,我覺得我的工作的工作。如果他們這樣做相似,但不同的東西,它可以變得相當混亂=)

我目前的應用程序,我去了上週,並刪除了大部分嵌套路線。 (當然,YMMV)