2013-05-06 23 views
5

Mam dwie tabele w mojej aplikacji internetowej: jedna dla Darczyńców (nazywana "darczyńcami"), a druga dla dat darowizny ("darowizny"). Po kliknięciu na darczyńcę możesz zobaczyć wszystkie . z ich datkówŚrednie wartości według grupy

Próbuję średnie wartości związanych z określonym terminie, dla konkretnej miłości na przykład, jeśli te istnieją zapisy dotyczące dawcy a:.

 *Donor A* 

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

Chciałbym system aby obliczyć i wyświetlić, że średnia kwota darowizny na 05/04/2013 wynosiła 35, a średnia kwota darowizny na 05/05/2013 wynosiła 45.

Obecnie Próbowałem przy użyciu atrybutu grupy w moim modelu dawcy:

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

nie wydają się działać. Odkąd jestem nowy w Railsach, nie jestem do końca pewien, czy jest to właściwy sposób, czy nie. Jest jeszcze kilka innych postów, które poruszają ten temat, ale żaden z nich nie pomógł mi rozwiązać problemu. Każda pomoc będzie bardzo ceniona!

Odpowiedz

7

Najprostsza składnia to zrobić:

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

ten powróci hash w formacie { 'donatedate' => 'average donateamount' }.

Naturalnie zakłada to, że użytkownik ma skojarzenie has_many :donations w swoim modelu Donor. Wielokrotnego użytku metoda wyglądałby następująco:

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

i obecnie można po prostu zadzwonić:

@donor.average_donation_by_date 

Aby to zobaczyć wizualnie, można nazwać to w kontrolerze:

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

i twoi Widok może zawierać coś takiego:

<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

To jest fantastyczne. Działa doskonale! – bork121

+0

Jeśli chciałbym, aby te średnie wyświetlały się w tabeli html w przeciwieństwie do skrótu, jak bym to robił? Czy istnieje odpowiednia dokumentacja, która to wyjaśnia? Dziękuję Ci! – bork121

+0

@ bork121: zaktualizowano do tego. – PinnyM

Powiązane problemy