如何在Rails 3中总结记录?

我有一个ItemsSold模型,它有一天销售的杂志,书籍,video,greeting_cards,笔的总数。 如何优雅地返回一个数组,其中包含最后一个任意周数的每个项目的每周销售总数?

我有一个模型文件:

#items_sold.rb class ItemsSold < ActiveRecord::Base attr_accessible :magazines, :books, :videos, :greeting_cards, :pens, :sold_date end 

我的表定义如下:

 t.integer :magazines t.integer :books t.integer :videos t.integer :greeting_cards t.integer :pens t.datetime :sold_date 

此外,是否有可能返回去年的月度总数?

请参阅ActiveRecord :: Calculations#sum

 by_week = (1...10).inject({}) do |wh, weeks_ago| startat = weeks_ago.weeks.ago endat = (weeks_ago - 1).weeks.ago wh[weeks_ago] = [:magazines, :books, :videos, :greeting_cards, :pens].inject({}) do |sh, attr| sh[attr] = ItemsSold.where("sold_date > ? and sold_date <= ?", startat, endat).sum(attr.to_s) sh end wh end 

这将返回一个像{1 => {:magazines => 5, :books => 33, ...}, 2 => {{:magazines => 13, :books => 28, ...}}, ...}的哈希值{1 => {:magazines => 5, :books => 33, ...}, 2 => {{:magazines => 13, :books => 28, ...}}, ...} ,其中每个键是一个周数(过去一周为1,两周前为2,等等),并且该值是另一个带总和的哈希值。