2009-08-05 266 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。你在問題中列出的路線看起來很棒!