0

特定の従業員が毎月使用した金額の折れ線グラフを作成したいのですが、情報は 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
4

0 に答える 0