2011-02-04 3 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 (: all)라는 호출을 캐시하지만 (포함 된 이벤트와 발표자를 캐싱하고 있습니까?)

답변

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

안녕하세요, 감사합니다, 그러나 이것은 나에게 오류를 제공합니다. '포함'이라는 연관성을 찾을 수 없습니다. 아마 철자가 틀린거야? – Sandro

+0

그냥 Track.find (: all, : include => [: events]) 만하면 모든 트랙을 반환하지만 이벤트는 포함하지 않습니다. – Sandro

+0

내 솔루션을 업데이트했습니다. 역학은 Rails.cache.fetch 블록에있는 것이 실제로 캐시되는 개념만큼이나 중요하지 않습니다. 캐싱을 구현 한 방법에 따라 이러한 연결을 올바르게 저장할 수 없다는 것을 기억하십시오. 실제로 저장하고있는 내용을 수정해야 할 수도 있습니다. 예를 들어, 연관된 객체의 배열을 반환해야 할 수 있습니다. –