2011-12-21 81 views
0

我有一个广告列表需要在我的网站的所有页面中显示,因此我将该列表添加到应用程序布局。事情是这样的:如何设置应用程序布局使用的变量

<div> 
    <%= render @ads %> 
<div> 

我想从数据库中检索到的广告列表中的应用程序布局呈现之前,而不是在使用另一种布局,所以我想这是的before_filter不解决,对吧?

我应该在哪里放这段代码?

@ads = Ad.all 

在此先感谢!

回答

2

鉴于广告名单应在网站的每个网页上显示,那么这样的事情应该工作:

class ApplicationController < ActionController::Base 
    before_filter :preload_ads 


    private 

    def :preload_ads 
    @ads = Ad.all 
    end 
end 
+0

谢谢!但是当另一个布局被渲染时,db查询也被执行,对吗?我试图找到性能方面的最佳选择。 – alf 2011-12-21 18:20:20

+0

如果您想在每个页面上显示广告列表,则无论呈现哪种布局,都需要在每个操作之前加载它。 – maprihoda 2011-12-21 18:52:12

+0

没错,但我有例如内部用于服务的另一个布局。我不希望调用这个服务来执行无用的数据库查询。 – alf 2011-12-21 18:58:42

2

使用cell components,如果你正在寻找一个可测试的,稳定的解决方案。

+0

+1听起来很有趣。谢谢! – alf 2011-12-21 18:33:34

1

如果您确定它一定会在单一布局中使用(并没有其他),你可以只是加载它在布局:

<div> 
    <%= render Ad.all %> 
<div> 
+0

不错的解决方法...谢谢! – alf 2011-12-21 19:57:25