2013-05-06 87 views
5

我在我的網絡應用程序中有兩個表格:一個用於捐助者(稱爲「捐贈者」),另一個用於捐贈金額(稱爲「捐贈」)。當您點擊捐助者時,可以看到所有。他們的捐款按組的平均值

我試圖用一個特定日期,特定的慈善相關的平均值。例如,如果供體存在的這些記錄:

 *Donor A* 

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

我想系統還要計算並顯示05/04/2013的平均捐款金額爲35,05/05/2013的平均捐款金額爲45.

目前我已經在我的捐贈模型使用組屬性的嘗試:

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

這似乎並沒有工作。由於我是Rails新手,我不完全確定這是否是正確的方式。還有一些其他文章涉及這個主題,但沒有任何文章幫助我解決這個問題。任何幫助將不勝感激!

回答

7

最簡單的語法來做到這一點:

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

這將在格式{ 'donatedate' => 'average donateamount' }返回一個哈希值。

當然,這假定您的Donor型號上有一個has_many :donations關聯。可重複使用的方法是這樣的:

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

,現在您只需撥打:

@donor.average_donation_by_date 

直觀地看到這一點,你可以在你的控制器稱之爲:

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

和你視圖可能包含這樣的內容:

<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

這太棒了。完美工作! – bork121 2013-05-06 15:30:34

+0

如果我想在html表格中顯示這些平均值而不是哈希值,我該如何去做這件事?有沒有可用的文件解釋這一點?謝謝! – bork121 2013-05-06 15:31:29

+0

@ bork121:已爲此更新。 – PinnyM 2013-05-06 15:55:44