rails中的动态页面缓存

dynamic page caching in rails

本文关键字:缓存 动态 rails      更新时间:2023-09-26

如何将动态缓存添加到时间中,或者我应该使用片段缓存?

我试着跟随RailsCasts,但没有成功。

_feed.html.rb

<% cache feed do %>
  <div class="feed">
  <div id="time">
    <%= render 'shared/time' unless @page_caching %>
  </div>
  <p class="pull-right grey"><%= time_ago_in_words(feed.posted_at) %></p>
    <div class="clearfix">
      <p class="grey"><%= image_tag feed.profile_pic, :class => 'pic', :size => '15x15' %> @<%= feed.name %></p>
    </div>
    <p class="content"><%= raw auto_link(feed.content, :username_include_symbol => true, :target => '_blank') %></p>
</div>
<% end %>

_time.html.rb

<p class="pull-right grey"><%= time_ago_in_words(feed.posted_at) %></p>

index.js.rb

$('#feeds').append('<%= j render(@feeds) %>');
<% if @feeds.next_page %>
  $('.pagination').replaceWith('<%= j will_paginate(@feeds) %>');
<% else %>
$('.pagination').remove();
<% end %>
$('#time').prepend('<%= j render("shared/time") %>');

feeds_cotroller.rb

  def index
    @page_caching = true
    @feeds = Feed.page(params[:page]).per_page(12)
  end

使用随时间变化的助手不应在缓存块内使用。最好的解决方案是使用一个js插件,它会为您插入时间字符串。谷歌timeagojs插件,你会得到一堆有用的结果。第一个结果在http://timeago.yarp.com/.使用该插件,您的代码应该如下所示(我插入了一个脚本,该脚本应该插入时间字符串)

<% cache feed do %>
  <div class="feed">
    <div id="time">
      <%= render 'shared/time' unless @page_caching %>
    </div>
    <p class="pull-right grey timeago" title="<%= feed.posted_at %>"></p>
    <script>
      jQuery(document).ready(function() { jQuery("p.timeago").timeago() })
    </script>
    <div class="clearfix">
      <p class="grey">
        <%= image_tag feed.profile_pic, :class => 'pic', :size => '15x15' %> @<%= feed.name %>
      </p>
    </div>
    <p class="content"><%= raw auto_link(feed.content, :username_include_symbol => true, :target => '_blank') %></p>
  </div>
<% end %>

这是一个简单的实现。您可能想将js调用移到资产文件中,这样就不必在缓存中调用它。不管怎样,这应该会给你一个主意。