Как мне суммировать записи в Rails 3? - PullRequest
3 голосов
/ 11 ноября 2010

У меня есть модель ItemsSold, которая имеет общее количество журналов, книг, видео, поздравительных открыток, ручек, проданных за один день.Как элегантно вернуть массив с итогами продаж за неделю для каждого элемента за последнее произвольное количество недель?

У меня есть файл модели:

#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 голосов
/ 11 ноября 2010

См. 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две недели назад и т. д.), а значение представляет собой еще один хеш с суммами.

...