递归Rails嵌套资源

Cam*_*oud 6 ruby ruby-on-rails

我有一个用于项目管理的Rails应用程序,其中有Project和Task模型.一个项目可以有很多任务,但任务也可以有无数个任务,无限制.

使用嵌套资源,我们可以有/ projects/1/tasks,/ projects/1/tasks/new,/ projects/1/tasks/3/edit等.

但是,您如何表示RESTful任务的递归性质?我不想深入到另一个层次,所以可能会有以下情况:

map.resources :tasks do |t|
    t.resources :tasks
end
Run Code Online (Sandbox Code Playgroud)

这会给我以下网址:

/tasks/3/tasks/new   
/tasks/3/tasks/45/edit
Run Code Online (Sandbox Code Playgroud)

或者,当涉及到单个任务时,我可以使用/ tasks/45/edit

这是一个合理的设计吗?

凸轮

mwi*_*ams 6

超越单一嵌套路线的任何地方通常被认为是一个坏主意.

The Rails Way的第108页开始:

" Jamis Busk是Rails社区中非常有影响力的人物,几乎与David本人一样.2007年2月,在他的博客中,他基本上告诉我们深度嵌套是一个_bad_事物,并提出了以下经验法则:资源应该永远不会嵌套不止一层. "

现在有些人会争论这个(在第109页讨论)但是当你谈论用任务嵌套任务时,它似乎没有多大意义.

我会以不同的方式处理你的解决方案,就像上面提到的那样,一个项目应该有很多任务,但是对于一项任务来说,许多任务看起来似乎不正确,也许那些应该被重新命名为子任务或者其他什么东西.线.


Ken*_*ric 3

他们没有理由拥有后代 URL。

逻辑上:

/projects/1 --> 项目 1
/projects/1/编辑(等)
/tasks/1 --> 任务 1
/project/1/tasks --> 项目 1 的任务列表
/项目/1/任务/新
/project/1/tasks/1/edit -> /tasks/5/edit (冗余)
/project/1/tasks/1 -> 重定向到 /tasks/1
/tasks/1/project -> 重定向到 /projects/1
/tasks/3/tasks --> 作为任务 3 的子任务的任务列表
/tasks/3/tasks/5 -> 重定向 /tasks/5/ (因为你实际上并不需要有一个递归 URL )
/tasks/5/parents -> 作为任务 3 的父级任务的列表
/tasks/5/parents/3 -> 重定向 /tasks/3/

恕我直言,没有理由要求 URL 具有关联性,您不需要知道任务 5 是任务 3 的子级即可编辑任务 5。