2011-12-21 17 views
0

サイトのすべてのページに表示する必要がある広告リストがあるため、アプリケーションレイアウトにリストを追加しました。このような何か:アプリケーションレイアウトで使用する変数を設定する方法

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

私は広告リストは、アプリケーションのレイアウトがレンダリングされる前に、DBから取得するが、別のレイアウトが使用されていないときたいので、私は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

+0

すべてのページに広告リストを表示するには、レンダリングするレイアウトに関係なく、各アクションの前に広告リストをロードする必要があります。 – maprihoda

+0

しかし、私は、例えば、私がサービスのために内部的に使う別のレイアウトを持っています。私は無用なdbクエリを実行するためにこのサービスへの呼び出しを望んでいません。 – alf

2

あなたがテスト可能と安定したソリューションを探しているならcell componentsを使用してください。

+0

+1興味深いですね。ありがとう! – alf

1

あなたはそれだけでその1つのレイアウトで使用することになるだろう、特定の(なしその他)している場合、あなたはちょうどレイアウトでそれを読み込むことができます。

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

すてきな回避策...ありがとう! – alf

関連する問題