Friday, September 17, 2010

[Rails] pagination and caching

What's the best way to cache a paginated result set with rails and
memcached.

For example

#posts controller

def index
@posts = Rails.cache.fetch('all_posts') do
Post.paginate(:conditions => ['xx = ?', yy], :include =>
[:author], :page => params[:page], :order => 'created_at D.ESC')
end
end

This obviously doesn't work when the params[:page] changes...I can
change the key to "all_posts_#{params[:page]}
_#{params[:order]_#{Post.last.created_at.to_i}}"

But then there could be several possible order (recent, popular, most
voted etc) and there will be a combination of pages and orders..lots
of keys this way.

Problem #2 - It seems when I implement this solution the caches get
written correctly and the page loads fine during the first call do a
paginate action but when I click back on the same page i.e. page1,
with "recent" order, it seems the browser does not even make a call to
the server. I don't see any controller action being called in the
production log??

I am using passenger, REE, memcached, and rails 2.3.5. Firebug shows
no requests being made....


Is there a simples/more graceful way of handling this?

Thanks

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home


Real Estate