2011-02-04 10 views
0

Rails.cache.fetch関数を使用してデータベース呼び出しをキャッシュする方法を学びましたが、要求に応答するときに、関連する複数のテーブルの内容を含めます(使用するキャッシュ応答

など)。
tracks = Rails.cache.fetch("events-by-track", :expires_in => 12.hours) do 
    Track.find(:all) 
end 
respond_with(tracks, :include => {:events => {:include => :speaker}}) 

このキャッシュ(と思う)コールTrack.find(:すべて)が、それはまた含まイベントやスピーカーをキャッシュされましたか?

答えて

0

いいえ、キャッシュしていません。あなたもそれらを含めるためにコールの中にそれらを配置する必要があります。例えば、このような何か:関連オブジェクトの配列の

 
tracks = Rails.cache.fetch("events-by-track", :expires_in => 12.hours) do 
    Track.find(:all, :include => {:events => :speaker}) 
end 
respond_with(tracks) 

例:

 
tracks, events = Rails.cache.fetch("events-by-track", :expires_in => 12.hours) do 
    tracks = Track.find(:all, :include => [:events]) 
    events = tracks.collect(&:events) 
    tracks, events 
end 
respond_with(tracks) 
+0

こんにちは、おかげで、これは私にエラーを与えます。 'include'という名前の関連付けが見つかりませんでした。おそらくあなたはそれを間違って綴ったでしょうか? – Sandro

+0

私はちょうどTrack.find(:all、:include => [:events])とすれば、すべてのトラックを返しますが、イベントは含みません。 – Sandro

+0

私のソリューションを更新しました。その仕組みは、Rails.cache.fetchブロックに入っているものが実際にキャッシュされているものであるという概念ほど重要ではありません。キャッシングをどのように実装すれば、これらの関連付けを適切に保存することができない可能性があることに注意してください。実際に格納しているものも変更する必要があります。たとえば、関連するオブジェクトの配列を返す必要があるかもしれません。 –

関連する問題