Cache output issue

I am using memcached.. and have the folllowing in my partial.

<%CACHE.fetch 'all_categories' do %>
<ul>
Category.all.each do |c|
<li><%= c.name %> </li>
end
</ul>
<%end %>

When I check in the irb console the "all_categories" key does get
populated.
So..CACHE.fetch 'all_categories' in irb does output the expected html
list.

But nothing gets outputted in my view.

I am guessing this is some sort of syntax error, what am I doing wrong?

Not sure what is “Category.all” in your “each” enumerator.

Try this, assuming CACHE.featch ‘all_categories’ is returning an array of sorts:

<% CACHE.fetch(‘all_categories’).each do |category| %>

  • <%= category[.name](http://c.name/) %>
<% end %>

In the case where the data is already in the cache the block is not
yielded to, so nothing will be output. You could try changing it to a <
%= but I'm not sure that mixes well with yielding to a block or the
case when it is generated fresh data. Why not use cache_fragment ?

Fred

You are right..

changing it to the following throws a nasty syntax error.

<%= Rails.cache.fetch "all_catgory" do %>
<!-- generate html for categories -->
<% end %>

If I do

<% cache(:key => 'all_category') do %>
<!-- generate html for categories -->
<%end%>

The it does work, BUT..somehow the page url is prepended to the cache
key so essentially this fragment which is same across the app, misses
for every new page load.

[DEBUG 17-09-2010 12:06:37] Cached fragment hit: views/localhost/
categories/autos-motorcyles/vote_topics?key=all_category (0.4ms)
[DEBUG 17-09-2010 12:06:37] Category Load (0.2ms) SELECT * FROM
`categories` ORDER BY name ASC
[DEBUG 17-09-2010 12:06:37] Cached fragment miss: views/localhost/
categories/autos-motorcyles/vote_topics?key=all_category (0.4ms)
[DEBUG 17-09-2010 12:06:37] Rendered shared/_cat_nav_list (8.9ms)
[DEBUG 17-09-2010 12:06:37] Cached fragment hit: views/localhost/
categories/autos-motorcyles/vote_topics?key=all_cities (0.3ms)
[DEBUG 17-09-2010 12:06:37] User Load (0.1ms) SELECT distinct city
FROM `users`
[DEBUG 17-09-2010 12:06:37] Cached fragment miss: views/localhost/
categories/autos-motorcyles/vote_topics?key=all_cities (0.4ms)
[DEBUG 17-09-2010 12:06:37] Rendered shared/_city_nav_list (4.7ms)

Can someone please help!

The it does work, BUT..somehow the page url is prepended to the cache
key so essentially this fragment which is same across the app, misses
for every new page load.

cache fragments are keyed like that by default - you can override
that by passing :controller/:action parameters to make up a path (this
doesn't need to be a real path in your application - it's just how it
builds the identifier for the cache entry

Fred