要筑巢还是不筑巢?

时间:2020-03-06 15:02:59  来源:igfitidea点击:

前提:
通常在准备新的Ruby on Rails App的过程中,我会绘制有关用户导航的模型和关系。通常,我碰到一个需要自我思考的地方,我是否应该超越通常的"经验法则",即不再嵌套1层深度。有时我觉得有必要嵌套,而不是创建另一个名称空间路由并复制工作。
这是一个例子:

型号:用户,公司,位置
用户拥有并属于许多公司(很多)
用户拥有并属于许多位置(很多)
公司拥有并属于许多地点(很多地方)

路线:
1级嵌套
users /:user_id / companies /列出与该用户相关的所有公司
users /:user_id / locations /列出与用户相关的所有位置
1层以上的嵌套
users /:user_id / companies /:company_id / locations /列出用户的所有公司位置

因此,我的问题是在RoR中嵌套1个以上的深度是否合适?是还是不是?又为什么呢?

解决方案

我倾向于听杰米斯·巴克(Jamis Buck)的建议,从不嵌套多于一个层次。

编辑:
如果我们要嵌套多个级别,我会在Edge中检查新的浅层路线功能

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

虽然从技术上讲这很好,但是因此命名路由助手不是吗

user_company_location_path( user_id, company_id, location_id )

不得不像这样放入3个参数,这很烦人。烦人的事可能是一个危险信号。

从理论上讲,这听起来不错,但我发现嵌套一个以上的级别可能会引起混乱,尤其是当我们在不同级别具有相同的命名控制器时(这很常见)

例如

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

我经常会发现我在与我认为的工作空间不同的名称空间中工作。如果它们执行相似但又不同的操作,可能会引起混乱=)

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