如何在Rails 3中总结记录?

时间:2010-11-11 20:28:12

标签: ruby-on-rails activerecord methods model sum

我有一个ItemsSold模型,其中包含一天内销售的杂志,书籍,视频,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

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

1 个答案:

答案 0 :(得分:0)

请参阅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,两周前为2,等等),值为另一个带总和的哈希。 / p>