2013-05-06 17 views
5

Ho due tabelle nella mia app Web: una è per donatori (denominati "donatori") e l'altra è per importi donazione (chiamati "donazioni). Quando si fa clic su un donatore, è possibile vedere tutti . delle loro donazioniValori medi per gruppo

sto cercando di valori medi associati a una data particolare, per un particolare di beneficenza per esempio, se esistono questi record per donatori a:.

 *Donor A* 

    Date  Donation Amount 
05/04/2013   30 
05/04/2013   40 
05/05/2013   15 
05/05/2013   75 

mi piacerebbe il sistema anche per calcolare e visualizzare che l'importo medio delle donazioni per il 05/04/2013 era 35 e l'importo medio delle donazioni per il 05/05/2013 era 45.

Attualmente Ho provato con l'attributo di gruppo nel mio modello dei donatori:

def self.average_donateperdate 
    Donation.average(:donateamount, conditions: ["donor_id = ?", @donor], group: "donatedate") 
end 

Questo non sembra funzionare. Dal momento che sono nuovo di Rails, non sono completamente sicuro se questo sia il modo giusto di farlo o meno. Ci sono alcuni altri post che toccano questo argomento, ma nessuno che mi ha aiutato a risolvere il problema. Qualsiasi aiuto sarebbe molto apprezzato!

risposta

7

La sintassi più semplice per farlo è:

@donor.donations.group(:donatedate).average(:donateamount) 

Ciò restituirà un hash nel formato { 'donatedate' => 'average donateamount' }.

Naturalmente, si presume che si abbia un'associazione has_many :donations sul modello Donor. Metodo riutilizzabile sarà simile:

def average_donation_by_date 
    donations.group(:donatedate).average(:donateamount) 
end 

Ed è ora possibile chiamare semplicemente:

@donor.average_donation_by_date 

Per vedere questo visivamente, è possibile chiamare questo nel controller:

@average_donations = @donor.average_donation_by_date.to_a.sort_by(&:first) 

E la tua la visualizzazione potrebbe contenere qualcosa del tipo:

<table> 
    <thead> 
    <tr> 
     <th>Date</th> 
     <th>Average Donation</th> 
    </tr> 
    </thead> 
    <tbody> 
    <% @average_donations.each do |date, amount| %> 
     <tr> 
     <td><%= date.strftime('MM/dd/yyyy') %></td> 
     <td><%= amount %></td> 
     </tr> 
    <% end %> 
    </tbody> 
</table> 
+0

Questo è fantastico. Ha funzionato perfettamente! – bork121

+0

Se volessi che queste medie fossero visualizzate in una tabella html anziché in un hash, come potrei fare? C'è documentazione disponibile che lo spieghi? Grazie! – bork121

+0

@ bork121: aggiornato per questo. – PinnyM

Problemi correlati