2011-11-17 13 views
1

我一直試圖找到一種方式來顯示從由所述應用程序的數據庫生成的側面菜單動態菜單。由於菜單需要用戶可編輯,因此我認爲最好的行動方式是將其創建爲腳手架,並添加一個「顯示菜單」操作,以樹狀方式呈現菜單,其餘部分腳手架將允許管理員用戶修改菜單項目。與滑軌(參照兩個控制器的輸出在一個視圖中)

現在,我提出了一個小問題 - 我不能找出一種方法來從application.html.erb(我用作所有操作和控制器的包裝器「調用」顯示菜單操作)。它有一個主體'body',它有一個'yield'線,這顯然會讓任何控制器被引用來渲染它的輸出。在此之前,我希望在該html的不同部分顯示動態菜單。

這是可能的,以及如何將一個去這樣做?

因爲相同的菜單應該是可見的,無論哪個特定動作(視圖)正在顯示,我想避免把相同的「菜單渲染」邏輯在我的應用程序的每個控制器的每個視圖。

回答

6

從您的術語,我不能完全肯定這是你所需要的,但在這裏不用。如果您想保留不同類型的信息佈局的不同部分,你可以像這樣

<!-- In application.html.erb --> 
<%= yield :menu %> 
<!-- Main content goes here --> 
<%= yield %> 

然後如果您想顯示的菜單所呈現,你可以做以下的看法。

<%= content_for :menu do %> 
    <!-- Show menu --> 
<% end %> 

這樣就可以顯示在你想顯示的菜單中,而不是在別人的看法的菜單。

--- UPDATE --- 對於從數據庫中檢索菜單選項動態菜單爲此

在你的ApplicationController添加的before_filter

before_filter :fetch_menu 


def fetch_menu 
    @menu = #db query goes here 
end 

在application.html.erb

<div id="menu"> 
    <%@menu.each do |menu|%> 
     <!-- Do something with menu --> 
    <% end %> 
</div> 
+0

感謝您的回答。我忘了提及我的意圖是在我所有的觀點中避免做同樣的「content_for」塊(因爲它們中會有一些)。無論用戶在看什麼視圖,菜單都保持不變,所以我想以某種方式使其集中。 – Iv4n

+0

在這種情況下,您需要將菜單添加到佈局,使其在每個視圖中都可用。 –

+0

是的,如果它是一個靜態菜單 - 我把它添加直入佈局,但我怎麼添加它,如果它應該通過查詢數據庫中生成的?這是我的問題:) – Iv4n

相關問題