2009-12-11 27 views
0

Je construis une application de reporting financier avec Ruby on Rails. Dans l'application, j'ai des objets d'états financiers mensuels (avec 'revenu' comme attribut). Pour un seul état financier, je veux montrer (1) des revenus à ce jour, et (2) des revenus de dernière année (les années civiles sont bien). Chaque objet possède également un attribut Date (pas Datetime) appelé 'month' (attention au nom de la variable 'month' par rapport au nom de la méthode 'month' ... peut-être que je devrais changer ce nom de variable).Date complexe de recherche et d'injection

Alors ...

Je pense que je dois (1) « trouver » le tableau des états financiers (à savoir, des objets) dans la plage de dates appropriée, puis (2) la somme des champs « recettes ». Mon code est à ce jour ...

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 } 

fin

Cela ne rompt pas l'application, mais retourne « 0 » qui ne peut pas être correct.

Des idées ou de l'aide seraient appréciées!

Répondre

0

Quel est le nom du champ dans l'objet financial_statement qui contient la valeur que vous voulez? Supposant que le nom du champ est ammount alors il suffit de modifier la déclaration inject être:

financial_statements_ytd.inject {|sum, revenue| sum + revenue.ammount } 
2

Cette déclaration peut faire ce que vous voulez:

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