巢还是不巢?

时间:2008-10-02 20:48:36

标签: ruby-on-rails ruby nested

前提: 通常在准备新的Ruby on Rails应用程序时,我会绘制有关用户导航的模型和关系。通常我会去一个我需要问自己的地方,不管我是否应该超越通常的“经验法则”,不再嵌套1级。有时我觉得需要嵌套,而不是创建另一个命名空间路由和复制工作。
这是一个例子:

模特:用户,公司,位置
用户拥有并属于许多公司(多对多)
用户拥有并属于许多地点(多对多)
公司拥有并且属于许多地点(多对多)

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

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

3 个答案:

答案 0 :(得分:7)

我倾向于跟随Jamis Buck的advice并且永远不会超过一个级别。

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

答案 1 :(得分:2)

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

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

user_company_location_path( user_id, company_id, location_id )

必须购买第3轮这样的参数很烦人。任何烦人的事情都可能是一面红旗。

答案 2 :(得分:1)

虽然理论上听起来不错,但我发现嵌套不止一个级别会开始变得混乱 - 特别是如果你在不同级别拥有相同的命名控制器(这可能很常见)

例如

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

我经常会发现我在一个不同的名称空间中工作,我认为我正在工作。如果他们做的相似,但不同的东西,它会变得相当混乱=)

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