Rails 5多个Sums和Join

时间:2016-10-20 11:17:52

标签: ruby-on-rails

此问题与this之前提出的问题有关。

模型税号的我的数据库列:ID,RECEIPT,TAXID,BASE,AMOUNT 有条目: 1,1,001,30 $,3 $

2,1,001,50 $,5 $

3,2,001,20 $,2 $

然后是第二个包含列的表:TICKETID,TICKETNUMBER

我的控制器

class TaxlinesController < ApplicationController

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

end

我的观点

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

        <td><%= receipt %></td>
        <td><%= amount %></td>
 <% end %>

这非常适合显示每行的票数以及相应的总金额。

问题1 。什么是在BASE的总和中显示的正确方法?我试过.sum(:AMOUNT, :BASE) and .sum(:AMOUNT).sum(:BASE),但它们都不起作用。

问题2 。如果现在我在视图中调用<%= taxline.TAXID %>我收到错误。 为了解决这个问题,我尝试添加视图<% @taxlines.each do |receipt, amount, taxid| %> and <td><%= taxid %></td>. And in controller @taxlines = Taxline.group(:RECEIPT).sum(:AMOUNT).select(:TAXID)。但它显示了一个空白栏目。

问题3 。我想从TICKETS表中显示TICKETNAME值。我已经在Ticketline Model belongs_to :ticket中设置了。我假设在解决问题1后我可以做ticketline.ticket.TICKETNAME.Right?

1 个答案:

答案 0 :(得分:0)

问题1:

试试这个

@taxlines = Taxline.group(:RECEIPT).select("SUM(AMOUNT) AS AMOUNT, SUM(BASE) AS BASE")

问题2:

要访问TAXID,您需要在组列中添加此内容。

@taxlines = Taxline.group(:RECEIPT, :TAXID).select("SUM(AMOUNT) AS AMOUNT, SUM(BASE) AS BASE, TAXID")

问题3:

要访问其他表变量,需要将join语句添加到查询中,然后进行分组。

@taxlines = Taxline.joins(:ticket).group(:RECEIPT, :TAXID).select("SUM(AMOUNT) AS AMOUNT, SUM(BASE) AS BASE, TAXID, TICKETNAME")

在视图方面,请尝试以下方法。

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

        <td><%= taxline.AMOUNT %></td>
        <td><%= taxline.BASE %></td>
        <td><%= taxline.TAXID %></td>
        <td><%= taxline.TICKETNAME %></td>

 <% end %>
P.S:没试过这个。