2013-05-06 13 views
5

ウェブアプリケーションには、ドナー(「ドナー」と呼ばれます)とドナー額(「寄付」)の2つのテーブルがあります。ドナーをクリックすると、 。彼らの寄付金のグループ別の平均値

私は特定の慈善のために、特定の日付に関連付けられた平均値にしようとしているたとえば、これらのレコードは、ドナーAのために存在する場合:。

 *Donor A* 

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

私はシステムが欲しいです2014年5月4日の平均寄付額が35で、2013年5月5日の平均寄付額が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

+0

ハッシュとは対照的に、これらの平均値をhtmlテーブルに表示したいのであれば、どうすればいいでしょうか?それを説明する資料がありますか?ありがとうございました! – bork121

+0

@ bork121:これのために更新されました。 – PinnyM

関連する問題