2009-08-05 218 views
0

目前我有属于程序步骤:双嵌套路由

map.resources :procedures, :has_many => :steps 

而这个工作对我很好,我得到的模样/程序/ 3 /步/ 5的URL。

然而,假设我想添加多一个层,即属于步骤,图以得到这样的:/步骤/ 3 /步骤/ 5 /数字/ 1

这是一个URL的一个怪物不谈,我该如何做这个路由?

编辑:也许我不该把那一边,应该我做到这一点?数字只是图像的容器,我将在步骤中显示图像,所以它不像用户实际“访问”任何图形,我只需要从图中获取图像。

+0

只要你知道,URI表示是正交的休息。此外,如果您对同一资源的一个子集有不同的URI(并且使用相同的媒体类型),那么您可能违反了REST约束。对于属于步骤的数字,沿着/ figures/1?step = 5的行可能会更好。 – aehlke 2009-08-11 17:43:03

回答

2
map.resources :procedures do |procedure| 
    procedure.resources :steps do |step| 
    step.resources :figures 
    end 
end 

如果你需要一个像/图表/然后使用路线:

map.resources :procedures, :shallow => true do |procedure| 
    procedure.resources :steps do |step| 
    step.resources :figures 
    end 
end 

在你的看法是这样的:

<%= link_to "Figure", figure_url(@procedure, @step, @figure) -%> 
1

这个blog post解释得比我能顶得更好。基本上,您可以在定义您的路线时使用:name_prefix option,以实现您所寻找的目标。

+0

据那篇文章我根本就没有做到这一点,做这样的事情,而不是:map.resources:步骤:的has_many =>:数字。 然而,假设用户将永远不会真正去的图,但数字会由简单步骤中使用。我还应该把它分开吗,还是把它当作一个大型的双重嵌套的东西呢? – Karl 2009-08-05 00:54:46

1

从你的评论中,我认为你是对的:你永远不需要路由到数字......你永远不想过度复杂你的路线。

这听起来像你走得最远的将是你的步骤的显示操作...你会问ActiveRecord这一步的数字列表。也就是说,你必须

class Step < ActiveRecord::Base 
    has_many :figures 
end 

class Figure < ActiveRecord::Base 
    belongs_to :step 
    has_many :images #perhaps? 
end 

但对于路由你只需要关心的是将REST的请求的资源 - 在这种情况下,它看起来像你的procedures,及其相关的steps。你在问题中列出的路线看起来很棒!