Сложную дату найти и ввести
Я создаю приложение финансовой отчетности с 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 }