设计Ruby on Rails应用程序和嵌套路由吗?

问题描述:

我是新来的铁轨,也是新的编码。几天之后,我遇到了一个问题,我被卡住了,并且得到了你们中的一些人的帮助。非常感谢。设计Ruby on Rails应用程序和嵌套路由吗?

我正在开发的应用程序是一种测试用例管理系统。我并不深入,但我认为在深入研究之前探索设计选项是个好主意。

应用程序有 - 用户(当然)。 其他资源:

  1. 项目
  2. 一个项目有许多子项目
  3. 一个子项目许多测试套件
  4. 一个测试套件有很多测试用例

我已经创建了以下资源到现在:(让我们离开用户现在)

  1. 项目

    class Project < ActiveRecord::Base 
        attr_accessible :description, :name 
        has_many :subprojects, dependent: :destroy 
        . 
        . 
    
  2. 子项目

    class Subprojects < ActiveRecord::Base 
        attr_accessible :description, :name 
        belongs_to :project 
        has_many :suites, dependent: :destroy //this is what I need to discuss 
    

项目和子项目正在完美的罚款。我想这被称为嵌套资源。虽然我使用belongs_to的和的has_many但路由我只是用简单的路线

resources :projects 
    resources :subprojects 

我不使用

resources :subprojects 
resources :projects do 
    resources :subprojects 
end 

现在,我会加入测试套件来子项目,这反过来将有很多测试用例。 最终将会有4层嵌套。

我的问题/顾虑是(感谢您的阅读,直到这里)

  1. 设计是否看行或者我在一个糟糕的方式这样做。
  2. 我应该有嵌套的路线?我在各个地方阅读了3-4层的嵌套路由将变得复杂。如果我所做的事情没有问题,那么我应该谨慎行事?
  3. 这对我来说是先进的..但在接下来的几周里,我打算将测试运行添加到应用程序,即用户/管理员(经理)可以添加测试运行,然后他可以选择子项目添加它。在这一点上,所有添加的子项目都没有任何测试套件。用户将选择在特定版本中运行哪些测试任务。 (这将是一个动态集合,静态集合总是存在的,即project-> subprojects-> suites-> testcases)。因此,一次发布或测试运行可能会或可能不会运行所有子项目或测试用例。我怎样才能实现它?如果你能给我一些想法继续下去,我将不胜感激。 测试运行也将具有每个测试套件/案例的状态 - 通过/失败/未决。目标是经理可以访问一个特定的测试页面,看看什么是状态,即测试已完成多少,测试案例如何失败等。

任何指针都会非常有帮助。

感谢

+0

只是为了对付术语,通常当我们谈论嵌套的资源,它在谈论的路线访问这些资源(例如'/项目/ 1/sub_projects/2 /'等)。正是你真正想避免的这种情况,但正如你所说的那样,那不是你正在做的。不要在你的对象之间有*关联*('has_many','belongs_to'等)之间混淆,这似乎是你实际上在谈论的东西。 – 2013-03-22 06:27:28

+0

哦,好的。谢谢。我很新的轨道。我希望尽快在术语上更好。 – LTCRails 2013-03-22 07:32:26

我看了你的问题没有明确,但我认为4条级别路线太深写

它的痛苦,当你旅行到一个URL,当你想要去的套房#显示页面,你应该使用project_subprojces_suite_path(项目,子项目,套件)

它,你哈瓦发送查询数据库来获取项目和子项目记录baddly

+0

是的,这就是为什么我不使用嵌套资源 – LTCRails 2013-03-22 06:31:54

你可以试试

shallow: true 

对于嵌套路由,所以你可以在路由中嵌套更深,但它会在必要的级别之后破坏路由。

例如。

resources :projects, shallow: true do 
    resources :sub_projects do 
    resources :test_suits do 
     resources :test_cases 
    end 
    end 
end 

所以它打破了2级的路线。

如:

/projects/:project_id/sub_projects 
/sub_projects/:sub_project_id/test_suits 
/test_suits/:test_suit_id/test_cases 

+0

谢谢。这是一个选择。但是,如果我没有嵌套路由并且简单地做,它会是一个糟糕的设计---- localhost:3000/projects/1 ------ localhost:3000/subprojects/new ------- - localhost:3000/testsuite/new ------- 而不是使用嵌套路由:---------- localhost:3000/projects /:project_id/subprojects /:subproject_id /测试套件/新 – LTCRails 2013-03-22 17:24:30

+0

- localhost:3000/projects /:project_id/subprojects /:subproject_id/testsuite/new 臭味bad bcs testsuits属于子项目,子项目显然属于项目,因此无需嵌套项目。嵌套路线高达2级是更好的选择,因为它无意增加2级以上。 是的嵌套路线是好的,否则你将不得不在每个表单中添加额外的字段或URL中的查询字符串,这是不好的铁轨实践。 – jbmyid 2013-03-25 05:33:18

+0

我没有使用嵌套的路线。在套件下创建测试用例或在项目下创建子项目时,我在表单中使用隐藏字段。 – LTCRails 2013-03-25 23:56:04