查询按Ruby on Rails中的关联表中的值进行分组

时间:2012-02-03 08:39:22

标签: ruby-on-rails group-by model-associations

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

0 个答案:

没有答案