Сложную дату найти и ввести

Я создаю приложение финансовой отчетности с Ruby on Rails. В приложении у меня есть объекты ежемесячного финансового отчета (с атрибутом "доход"). Для любого отдельного финансового отчета я хочу показать (1) годовой доход и (2) прошлогодний доход (с календарными годами все в порядке). У каждого объекта также есть атрибут Date (не Datetime), который называется "month" (следите за путаницей имени переменной "month" и путаницы с именем метода "month"... возможно, мне следует изменить это имя переменной).

Так...

Я думаю, что мне нужно (1) "найти" массив финансовых отчетов (т. Е. Объектов) в соответствующем диапазоне дат, а затем (2) суммировать поля "доход". Мой код до сих пор...

def ytd_revenue
  # Get all financial_statements for year-to-date.
      financial_statements_ytd = self.company.financial_statements.find(:all, 
      :conditions => ["month BETWEEN ? and ?", "self.month.year AND month.month = 1",
      "self.month.year AND self.month.month" ])
  # Sum the 'revenue' attribute
      financial_statements_ytd.inject(0) {|sum, revenue| sum + revenue }

конец

Это не нарушает работу приложения, но возвращает "0", что не может быть правильным.

Любые идеи или помощь будут оценены!

3 ответа

Это утверждение может делать то, что вы хотите:

financial_statements_ytd.inject(0) {|sum, statement| sum + statement.revenue }

Вы также можете посмотреть на метод класса суммы ActiveRecord - вы можете передать имя поля и условия, чтобы получить сумму.

Как называется поле в financial_statement объект, который содержит значение, которое вы хотите? Предположим, что имя поля ammount затем просто измените inject заявление быть:

financial_statements_ytd.inject {|sum, revenue| sum + revenue.ammount }
Другие вопросы по тегам