特定の従業員が毎月使用した金額の折れ線グラフを作成したいのですが、情報は 3 つのテーブルに散らばっています。目的の出力は、次のような配列です。
[["08-Aug-11",500],["02-Feb-11",200],["03-Mar-12",260],["05-May-12",140],["09-Sep-11",0],["05-May-11",500],["12-Dec-11",420],["01-Jan-12",260]]
対象機種は以下の通り
class Employee < ActiveRecord::Base
has_many :cases
end
class Case < ActiveRecord::Base
belongs_to :employee
has_many :expenses
end
class Expense < ActiveRecord::Base
belongs_to :case
end
多くの経費を含むケース テーブルがあり、ケース内の日付値で経費をグループ化し、経費内の値を合計して、特定の従業員が費やした金額の折れ線グラフに必要なデータを生成したい毎月。
すべてのケースで毎月のグループアップが必要な場合、これは問題になりませんが、ケースも選択され、ケースは月ごとにグループ化されるため、これを行うための気の利いた SQL クエリであると確信しています。しかし思いつきません。
誰でも私にポインタを与えることができますか?または、データを生成するためのより良いアプローチはありますか?
とりあえず、思いついたのはこれ
expenses = Case.where( "id IN (?)", employee.cases.all.map{ |x| x.id } )
.group_by { |t| t.case_completion_date.beginning_of_month }
expenses.each do |monthly_expenses|
total_price = 0
monthly_expenses[1].each do |active_case|
if active_case.estimates.any?
total_price = total_price + active_case.expenses.first.price
end
end
expenses_array << [ monthly_estimate[0].strftime( "%m-%b-%y" ), total_price ]
end