Rails 3片段缓存输出问题

时间:2011-05-25 06:08:17

标签: ruby-on-rails ruby-on-rails-3 memcached

在使用memcached查看Rails 3.0.4应用程序中的片段级缓存时,我遇到了一个问题。我对正在发生的事情感到有些困惑,但我认为这与输出从缓存区域中拉出的方式有关。我在-vv模式下在本地运行memcached,并且可以看到正确保存/拉出片段的密钥,问题是memcached中项目的值。

以下是我正在做的事情:

< ... 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之后的区域)。这是有趣的部分,并且是我认为它与捕获输出有关的原因 - 它不是整个页面,只有一些html之前和之后。

根据rails fragment cacheing指南,我认为我正在做的事情正确(http://guides.rubyonrails.org/caching_with_rails.html#fragment-caching)。有没有人想过可能会发生什么?

非常感谢您的帮助!

-Eric

1 个答案:

答案 0 :(得分:3)

在这种情况下,您错误地使用ERB。基本上取出=符号。你做的是你也返回块的值,因此你看到了双输出的原因。

&lt;%cache(“item _#{i.id}”)执行%&gt;

此外,ActiveRecord对象响应#cache_key方法中的内部烘焙。尽量利用这一点。 ActiveRecord对象的默认#cache_key也使用类名,对象ID和updated_at时间戳。缓存方法应该能够采用多个args或一个数组,它将为每个响应它的对象调用cache_key。使用这种方法,这意味着你会在对象更新时缓存未命中,非常酷的东西。那么,IIRC

&lt;%cache(“item”,i)执行%&gt;