1

我正處於我的發展階段,我認爲深度(> 1)嵌套資源是不值得的。深度嵌套多態資源值得付出努力嗎?

我有這樣的事情:

resources :first-level do 
    resources :comments 
    resources :second-level do 
     resources :comments  
     resources :first-child do 
     resources :comments 
     end 
     resources :second-child do 
     resources :comments 
     end 
     resources :third-child do 
     resources :comments 
     end 
    end 
    end 

起腳的是,評論是多態的其他資源。我的目的是要有乾淨的外觀網址,如〜/一級/ 34 /評論,〜/一級/ 34 /二級/ 56 /三級/評論等。

到目前爲止的問題是嵌套的多態路由只會導致悲傷。我正在關注一些Ryan Bates Railscasts作爲例子。例如,如果我嘗試在正常工作的第一級使用polymorphic_path和獲取:

polymorphic_path([@commentable, comments]) => ~/first-level/34/comments 

~/first-level/34/second-level/23相同的代碼失敗:

undefined method 'second-level_comment_path' for #<#<Class:0x007fcc4acfbe58>:0x007fcc4ae73d08>,但是當我看到我的路線實際命名路線是first-level_second-level_comment。我試圖手動創建second-level_comment_path以基本上別名first-level_second-level_comment,但我似乎無法做到這一點。

除非有人能在這裏指出一個明顯的錯誤我傾向於這種方式(http://weblog.jamisbuck.org/2007/2/5/nesting-resources),只是未嵌套這些。我有一個麪包屑風格的導航,以顯示hiearchy,所以應該足夠了,我看它越多,這些網址確實有點不方便。

回答

1

使用嵌套資源時,您需要指定所有父級別,以便訪問子級別。否則Rails將不知道如何達到你的孩子的水平。所以,你需要使用第一level_second-level_comment和供應的第一級和第二級值是這樣的:

first-level_second-level_comments_path(@my_first_level, @my_second_level) 

將呈現:

~/first-level/34/second-level/23/comments 

編輯:

我不看不出爲什麼你需要逐步建立路徑。

你總是可以建立first_level評論道:

first-level_comments_path(@my_first_level) 

將呈現

~/first-level/34/comments 

或列表的第一個級別的所有第二層次:(第二級對一個給定的一線指標作用水平)

first-level_second-levels_path(@my_first_level) 

會渲染

~/first-level/34/second-levels 
+0

感謝您的提示。我開始放下自己的資源,然後迅速發現,通過嵌套的困難更容易掙扎。對於給定的嵌套資源,有一個簡單的方法是重構路徑的層次結構,即first_second_third_etc_path? –