2014-01-30 67 views
0

我有expenses有列::quantityunitcost。总费用金额为:quantity * unit costRails总和两个值相乘

woassetshave_many :expenses

我想在asset索引列表中显示每个asset的总数。

这工作:

<% expensetotal = 0 %> 
    <% woasset.expenses.each do |expense| %> 
     <% expensetotal = expensetotal + (expense.quantity.to_i * expense.unitcost) %> 
    <% end %> 
    <td><%= expensetotal %></td> 

但是,有没有更好的办法?

我试图在expense模型定义expense total,像这样:

def expense_amount 
"#{self.quantity} #{self.unit_price}" 
end 

那么这个索引:

<%= woasset.expenses.sum(:expense_amount) 

但是,没有工作。

感谢您的帮助

+1

会是什么意思总结包含两个数字的字符串?无论如何,为什么不在创建/更新/保存/其他方面填写费用总额? –

+0

您也可以使用聚合函数直接在数据库中执行此操作。你应该研究一下,因为一般来说,让数据库工作然后返回答案比获取数据然后在服务器上完成工作要快。 – MrDanA

+0

这些都是很好的选择 - 谢谢 – Reddirt

回答

0

这应该工作

<td><%= woasset.expenses.map{|e| e.quantity * e.unitcost}.reduce(:+) %></td> 

。当然,这是更好地解压到一个模型

class Woasset 
    def total_expense 
    expenses.map{|e| e.quantity * e.unitcost}.reduce(:+) 
    end 
end 

<%= woasset.total_expense %> 
+0

感谢您的帮助! – Reddirt