0

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

我试图关注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
4

1 回答 1

0

不应在缓存块内使用随时间变化的助手。最好的解决方案是使用一个 js 插件来为你插入时间字符串。google for timeago js 插件,你会得到一堆有用的结果。第一个结果在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 调用移动到资产文件,这样您就不必在缓存中调用它。无论如何,这应该给你一个想法。

于 2013-08-29T10:22:51.223 回答