2013-08-29 72 views
0

如何向时间添加动态缓存或我应该使用片段缓存?在rails中动态页面缓存

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

回答

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调用移至资产文件,因此您不必在缓存中调用它。无论如何,这应该给你一个想法。