Запрос к группированию по значениям в связанной таблице в Ruby on Rails - PullRequest
0 голосов
/ 03 февраля 2012

Я хочу составить линейный график того, сколько денег использовал конкретный сотрудник каждый месяц, информация разбросана по 3 таблицам. Требуемый вывод представляет собой массив Array следующим образом.

[["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
...