2011-05-25 93 views
0

我在使用memcached在Rails 3.0.4應用程序中查看片段級緩存時遇到了問題。我對發生的事情有點困惑,但我認爲這與緩存區域內輸出的方式有關。我在-vv模式下本地運行memcached,並且可以看到片段正確保存/拉出的關鍵,問題在於memcached中項目的值。Rails 3片段緩存輸出問題

下面是我在做什麼:

< ... html before ... > 
<%= cache("item_#{i.id}") do %> 
    <%= render :partial => 'shared/item', :locals => { :item => i, :functionality => [:set_as_default] } %> 
<% end %> 
< ... html after ... > 

當我看到在緩存中的關鍵價值,它具有HTML代碼是在片段緩存塊內頁,也有外(從之前的HTML和HTML之後的地區)。這裏有一個有趣的部分,也是我認爲它與捕獲輸出有關的原因之一 - 它不會完成整個頁面,只有一些html之前和之後。

根據rails碎片緩存指南,我想我正在做的事情(http://guides.rubyonrails.org/caching_with_rails.html#fragment-caching)。有沒有人有想過會發生什麼?

非常感謝您的幫助!

-Eric

回答

3

在這種情況下,你不正確使用ERB。基本上拿出=號。你做什麼是你回報塊的價值,因此你爲什麼看到雙重輸出。

<%緩存( 「項目_#{i.id}」)做%>

另外,ActiveRecord對象在#cache_key方法內部烘烤響應。試着利用這一點。 ActiveRecord對象的默認#cache_key也使用類名稱,對象ID和updated_at時間戳。緩存方法應該能夠接受多個參數或一個數組,並且它會爲響應它的每個對象調用cache_key。使用這種方法,這意味着你將在對象更新時緩存未命中,非常酷的東西。所以,IIRC

<%緩存( 「項目」,i)辦理%>

+0

傑夫,你搖滾......這已經很無奈了我。事實證明,我不僅需要移除緩存上的<%=,還需要移除渲染調用。看來我確實需要更多地瞭解erb渲染的複雜性(去年1月剛剛開始使用ruby/rails,所以我對這種語言非常陌生)。非常感謝 - 非常感謝! – ejlevin1 2011-06-15 04:50:58