Forum: Ruby on Rails How to implement fragment caching with rails ajax call?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
C4c6a5f1c31b2aa8ed31a58b771ebd1c?d=identicon&s=25 Logesh m (Guest)
on 2014-12-01 13:55
(Received via mailing list)
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*
<div id="show1">



</div>

<script>

$.ajax({

    type : "GET",

    url : 'sample1',

    error: function( xhr, tStatus, err ) {

        $("#show1").html("Error");

    }

});

</script>


*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| %>



  <div class="name">

    <%= value.name %>

  </div>

<% 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!
2da864f0202e0387adda7531651d8682?d=identicon&s=25 Vivek Sampara (Guest)
on 2014-12-01 14:20
(Received via mailing list)
You have to use fragment caching

http://api.rubyonrails.org/classes/ActionControlle...

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 ) %>');
This topic is locked and can not be replied to.