2010-08-18 63 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的内容为其呈现内容。