我的网络应用程序中有两个表:一个用于捐赠者(称为“捐赠者”),另一个用于捐赠金额(称为“捐赠”)。当您点击捐赠者时,您可以看到他们的所有捐款。
我正在尝试为特定的慈善机构平均与特定日期相关的值。例如,如果捐赠者A存在这些记录:
*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。
目前我已尝试在我的捐赠模型中使用group属性:
def self.average_donateperdate
Donation.average(:donateamount, conditions: ["donor_id = ?", @donor], group: "donatedate")
end
这似乎不起作用。由于我是Rails的新手,我不完全确定这是否是正确的做法。还有一些其他帖子涉及这个主题,但没有一个帮助我解决这个问题。任何帮助将不胜感激!
答案 0 :(得分:8)
执行此操作的最简单语法是:
@donor.donations.group(:donatedate).average(:donateamount)
这将返回格式{ 'donatedate' => 'average donateamount' }
。
当然,这假设您的has_many :donations
模型上有Donor
个关联。可重用的方法如下:
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>