Я хочу составить линейный график того, сколько денег использовал конкретный сотрудник каждый месяц, информация разбросана по 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