Rails 5 sum和group

时间:2016-10-20 02:23:36

标签: ruby-on-rails

模型税务的我的数据库列: ID,RECEIPT,TAXID,BASE,AMOUNT

假设我有数据库条目:

1,1,001,30 $,3 $

2,1,001,50 $,5 $

3,2,001,20 $,2 $

我想显示每张收据的金额总和。结果应该是:

1,8 $

2,2 $

我的控制器

    class TaxlinesController < ApplicationController

  def index
    @taxlines = Taxline.group(:RECEIPT).sum(:AMOUNT)
  end

end

我的观点:

 <% @taxlines.each do |taxline| %>


        <td><%= taxline.RECEIPT %></td>
        <td><%= taxline.AMOUNT %></td>

但是我得到错误未定义的方法`RECEIPT&#39; for [&#34; 01a8fdd7-8eb6-44d0-a686-8010b9e30206&#34;,145000.0]:Array

145000.0和01a8fdd7-8eb6-44d0-a686-8010b9e30206参考db中的真实值,而不是上面的示例。但它提出了这个想法。

App建立在现有数据库上,列名大写。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您的问题是Taxline.group(:RECEIPT).sum(:AMOUNT)返回Hash对象而不是您期望的一组Taxline实例。它们的键是分组值(RECEIPT),值是相应的总和。类似的东西:

{ "01a8fdd7-8eb6-44d0-a686-8010b9e30206" => 145000.0, ... }

执行@taxlines.each时,Hash会被强制转换为数组。

使用您当前的代码,您只需将视图更改为:

<% @taxlines.each do |receipt, amount| %>
    <td><%= receipt %></td>
    <td><%= amount %></td>