2011-01-25 93 views
0

路由如何創建智能嵌套鏈接?

 resources :departments do 
     resources :buildings do 
     resources :halls do 
     end 
     resources :chairs do 
     resources :buildings do 
      resources :halls do 
     end 
     end 
    end 

我想分享chairsdepartments之間的buildingshalls了同樣的觀點。而且我想在視圖中創建的URL是這樣的:

link_to "Show", [@department, @chair, @building, @hall].compact

如果@chair不存在,這會是nil,因此上連桿會產生:

link_to "Show", [@department, @building, @hall]

如果@chair存在:

​​

我的問題是:如何創建這種url的方式爲editnew的操作?或者,也許這種嵌套資源存在更好的解決方案?

+0

通常不建議將資源嵌套深度超過一個級別。 – 2011-01-25 01:24:06

+0

我第二個Jimmy的評論。這是一個涵蓋嵌套資源的熱門文章。我建議你看看它。 http://weblog.jamisbuck.org/2007/2/5/nesting-resources – mbreining 2011-01-25 03:44:12

回答

0

您可以在陣列中堅持一個符號,以及。所以像這樣:

link_to "Edit", [:edit, @department, @chair, @building, @hall] 
0

我有一個應用程序,我們可以嵌套三個深達四個資源。一個例子是聯繫人的管理。我們有公司,位置和聯繫模式。

通常情況下,您可以使用new_department_chair_building_path(@department,@chair)訪問新的和編輯路徑。

不要忘記在你的前輩(部門,椅子)中包含新建築物的隱藏ID。

在您的建築物控制器中,您將不得不根據上下文過濾出要加載的對象。我們這樣做是這樣的

# Company controller 
def index 
    if params[:project] 
    @project = .... 
    end 
end 

可能有更好的方法來做到這一點,但我們還沒有找到任何。

在視圖中,我們檢查@project,然後渲染部分。

我希望這可能會有所幫助。

乾杯,