ruby-on-rails - 按组划分的平均值

标签 ruby-on-rails date group-by average

我的网络应用程序中有两个表:一个用于捐赠者(称为“捐赠者”),另一个用于捐赠金额(称为“捐赠”)。当您单击捐赠者时,您可以看到他们的所有捐赠。

我正在尝试为特定的慈善机构平均与特定日期相关的值(value)。例如,如果捐赠者 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 的新手,我不完全确定这是否是正确的方法。还有一些其他帖子涉及这个主题,但没有一个能帮助我解决这个问题。任何帮助将不胜感激!

最佳答案

执行此操作的最简单语法是:

@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

要直观地看到这一点,您可以在 Controller 中调用它:
@average_donations = @donor.average_donation_by_date.to_a.sort_by(&:first)

您的 View 可能包含以下内容:
<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>

关于ruby-on-rails - 按组划分的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16401617/

相关文章:

ruby-on-rails - rails : pagination with custom offset using Kaminari

java - Date 的自定义 gson 反序列化程序永远不会被调用

c# - MySqlDataAdapter 与 GroupBy sql 字符串返回空内容

ruby-on-rails - 如何从 Rails 应用程序中完全删除 Yarn?

ruby-on-rails - 部署后 Rails 不使用新的 manifest-*.json 文件

java - 以简单日期格式解析月份的问题

r - dplyr - 将分组变量与分组变量的子集进行比较

python - group by 分组和平均

ruby-on-rails - 尝试更新 Rails 后安装 gem "termios"时遇到问题

php - 是否有相当于 strtotime 的 R