显示当天活动的摘要

时间:2014-02-26 00:07:25

标签: ruby-on-rails

假设我有一个名为Thing的模型,我想在主页中看到每天创建了多少东西。

我想出了这个:

Thing.order("created_at desc").where(created_at: (Date.today - 1.month)..Date.today).group_by{|s| s.created_at.to_date}

我可以打电话给each_pair并做我的事。

然而,这似乎非常低效:这是所有用户都可以看到的主页,而且每天只会改变几次。

我觉得我应该做某种缓存,但我不知道使用什么模式。

2 个答案:

答案 0 :(得分:1)

虽然我觉得这些信息不足以给你一个完整的答案,但这是我的看法:

  1. 您可以将每天的统计信息存储为数据库表格中的一列,除了今天的统计数据
  2. 动态计算并使用memcache或其他缓存存储。请参阅片段缓存http://guides.rubyonrails.org/caching_with_rails.html#fragment-caching
  3. 示例:

    <% Order.find_recent.each do |o| %>
      <%= o.buyer.name %> bought <%= o.product.name %>
    <% end %>
    
    <% cache do %>
      All available products:
      <% Product.all.each do |p| %>
        <%= link_to p.name, product_url(p) %>
      <% end %>
    <% end %>
    

答案 1 :(得分:1)

绝对缓存该部分是一个好主意,因为它每天只有一些更新。一种可能的方法(使用片段缓存):

在您看来:

<% cache('homepage_things') do %>
  <% @things.each do |thing| %>
    <%= thing %> 
  <% end %>
<% end %>

在您的控制器中:

class ThingsController < ApplicationController
  def create
    @thing = Thing.new(thing_params)

    if @thing.save
      expire_fragment('homepage_things')
      # other stuff
    else
      # other stuff
    end
  end
end