我有一个带发票的应用。对于发票,它显示具有金额和增值税百分比的发票行。在发票摘要中,我需要显示按增值税百分比分组的增值税总额。 invoice_line记录具有rate,quatity和vat_id。因此,当显示发票行时,我会遍历它们并显示它们:
- @invoice.invoice_lines.each do |line|
%td= line.rate
%td= line.quanity
%td= line.rate*line.quantity
%td= Vat.find(line.vat_id).percentage
如何存储按增值税ID分组的金额?我想把它们存放在一个带有哈希的数组中,但这很复杂,也许有一个很好的选择,我忽略了?
编辑: 我想我找到了一种使用Hash的方法。首先,我迭代所有增值税记录并创建哈希:
- vat_amounts = Hash.new
- @vats.each do |vat|
- vat_amounts[vat.percentage] = 0
然后,在迭代invoice_lines
时,我将增值税金额添加到正确的哈希记录中:
- invoice.invoice_lines.each do |line|
- vat = Vat.find(line.vat_id)
%tr
%td= line.quantity
%td= line.rate)
%td= line.quantity*line.rate
%td= vat.percentage
- vat_amount = (line.quantity*line.rate)*vat.percentage
- vat_amounts[vat.percentage] += vat_amount
最后,在创建摘要时,我会显示每增值税百分比的增值税总额:
.summary
- total_vat = 0
- @vats.order(:percentage).each do |vat|
= "VAT #{vat.percentage}:"
= vat_amounts[vat.percentage]
当然,要做出很多改进,但这似乎有效。