How to implement fragment caching with rails ajax call?


#1

I have a view where I have multiple things to load and I make an ajax
call
from the index view to add the content on success of each call and I
would
like to cache each of it so as to make the performance better.

index.html.erb

test_controller.rb
def sample1

@sample1 = Sample1.paginate(:page => params[:page], :per_page =>

@per_page)

respond_to do |format|

  format.js

end

end

sample1.js.erb

jQuery(’#show1’).html(’<%= escape_javascript render “sample1” %>’);

_sample1.html.erb
<% @sample1.each do |value| %>

<%= value.name %>

<% end %>

I have thousands of name and these values do not change often and I show
100 entries on each page. So, I wanted to cache these and display
instead
of rendering each time.

Thanks in advance!


#2

You have to use fragment caching

http://api.rubyonrails.org/classes/ActionController/Caching/Fragments.html

and write a private method like

def sample_from_cache
@cache = read_fragment(:page => params[:page], :per_page => @per_page)
return @cache unless @cache.blank?
@cache = render_to_string(:partial => “search.html.erb”, :locals => {
:sample1 => Sample1.paginate(:page => params[:page], :per_page =>
@per_page) } )
write_fragment({:page => params[:page], :per_page => @per_page},
@cache)
end

and your action like this

def sample1
@sample1 = sample_from_cache
respond_to do |format|
format.js
end
end

sample.js.erb

jQuery(’#show1’).html(’<%= escape_javascript ( @sample1 ) %>’);