我想制作一个某个员工每个月用了多少钱的折线图,信息分散在 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