2010-08-18 89 views
7

例如,我想讓我的邊欄有幾個動態內容。使用其他方法會導致我將查詢代碼放入View中,這根本不是一個好主意。我想在我的控制器中保留任何查詢。動態邊欄與導軌佈局

目前據我所知有幾個ff。方法:

渲染共享局部 - >沒有在那裏把該查詢

render :partial => "shared/sidebar" 

內容 - >在註釋

<%= yield :sidebar %> 
<% content_for :sidebar do %> 
    <a href="http://www.netscape.com">Netscape</a><br> 
    <a href="http://www.lycos.com">Lycos</a><br> 
    <a href="http://www.walmart.com">Wal Mart</a><br> 
<% end %> 

第三附加細節是其直接寫入所述佈局文件。

那麼我該如何做這項工作?

+0

「內容爲 - >仍然在視圖中」爲什麼?恕我直言,這是你可以做到這一點,仍然在控制器中具有所有查詢的方式,爲什麼你需要在視圖中查詢這種方式? – jigfox 2010-08-18 11:04:05

+0

基本上基於我的理解。它轉向了管制員的觀點。但是,如果是這樣的話,我需要將查詢代碼放在每個控制器中,並將content_for放在每個想要顯示側邊欄的視圖中。 – DucDigital 2010-08-18 11:42:27

回答

9

如果您希望在每個視圖中都使用此方法,則可以將填充必需數據的方法放在application_controller中,並使用before_filter來觸發它。

before_filter :load_sidebar 

def load_sidebar 
    @data = Thingy.find(:all) 
end 

然後你的partial或content_for元素檢查@data和進程。

1

如果您想減少application_controller.rb中的代碼量,您可能需要考慮使用Cells寶石。

這將允許您在單獨的單元格控制器中定義您的「查詢」,並且您將在視圖內使用類似render_cell :sidebar, :myquery的內容爲其呈現內容。