Ruby on rails 筑巢还是不筑巢?

Ruby on rails 筑巢还是不筑巢?,ruby-on-rails,ruby,nested,Ruby On Rails,Ruby,Nested,前提: 通常在准备一个新的RubyonRails应用程序时,我会画出关于用户导航的模型和关系。通常我会去一个地方,我需要问自己,我是否应该超越通常的“经验法则”,即巢穴深度不超过1层。有时我觉得需要嵌套,而不是创建另一个名称空间路由和重复工作。 这里有一个例子: 型号:用户、公司、地点 用户拥有并属于多家公司(多对多) 用户拥有并属于多个位置(多对多) 公司拥有并属于多个地点(多对多) 路线: 1级嵌套 用户/:用户id/公司/-列出与用户相关的所有公司 用户/:用户id/位置/-列出与用户相关

前提: 通常在准备一个新的RubyonRails应用程序时,我会画出关于用户导航的模型和关系。通常我会去一个地方,我需要问自己,我是否应该超越通常的“经验法则”,即巢穴深度不超过1层。有时我觉得需要嵌套,而不是创建另一个名称空间路由和重复工作。
这里有一个例子:

型号:用户、公司、地点
用户拥有并属于多家公司(多对多)
用户拥有并属于多个位置(多对多)
公司拥有并属于多个地点(多对多)

路线:
1级嵌套
用户/:用户id/公司/-列出与用户相关的所有公司
用户/:用户id/位置/-列出与用户相关的所有位置
超过1级嵌套
用户/:用户id/公司/:公司id/位置/-列出用户的所有公司位置


所以,我的问题是,在RoR中嵌套超过1层是否合适?是还是不是?为什么呢?

我倾向于追随杰米斯·巴克,从不在一层以上筑巢

编辑: 如果你要嵌套超过1个级别,我会在Edge中查看新功能

users/:user_id/companies/:company_id/locations/
虽然从技术上讲这很好,但是命名的路由帮助程序不是这样吗

user_company_location_path( user_id, company_id, location_id )

像这样必须循环3个参数是很烦人的。任何令人讨厌的事情都可能是一个危险信号。

虽然理论上听起来不错,但我发现嵌套多个级别可能会让人困惑——特别是如果在不同级别上有相同的命名控制器(这可能很常见)

乙二醇

我经常会发现,我所使用的名称空间与我所认为的不同。如果他们做相似但不同的事情,可能会让人非常困惑=)

我当前的应用程序,我上周通过并删除了大部分嵌套路由。
(当然,YMMV)

查看资源控制器中的smart\u url:smart\u url(@user、@company、@location)。但是是的,筑巢太深似乎是错误的。浅路线FTW。这几乎肯定是你想要的。LocationsController#索引作为/locations没有任何意义,因为您永远不会想要/all/locations。但它允许您将所有位置保留在/locations/上,无论它与哪种类型关联。
  user/x/blog/y/profile/z, and
  user/x/profile/a