我有一个模型发票
表发票: ID,产品,单位,价格
在我看来,我想显示一些列的总数。
例如,显示我可以在控制器中设置的总数量:
@invoices = Invoice.group(:PRODUCT).select(ID, PRODUCT, UNITS, SUM(UNITS) AS TOTALUNITS, PRICE").order('PRODUCT ASC')
@units_total = @invoices.map(&:UNITS).sum
在我看来
<%= @units_total %>
并返回列UNITS中的总数。这很好。
如果我在我的模型中定义:
def total_amount
(self.PRICE * self.TOTALUNITS)
end
然后以同样的方式我想显示total_amount的总数,我在我的控制器中尝试过:
@amount_total = @invoices.map(&:total_amount).sum
它不起作用,因为我假设如果我不使用列名,则语法必须不同。
那我该怎么办?
更新 问题来自于我在模型中使用的事实(self.PRICE * self.TOTALUNITS)。当我发布问题时我没有把它包括在内,因为我认为这并不重要。但如果我用(self.PRICE * self.UNITS)替换(self.PRICE * self.TOTALUNITS),那么没有错误,但值显然是错误的。
答案 0 :(得分:1)
您可以检查这是否有效
@amount_total = @invoices.map{ |invoice| invoice.PRICE.to_f * invoice.UNITS.to_i }.sum
我不知道你得到了什么错误,但可能是由于列中的空值。
希望有所帮助!
答案 1 :(得分:1)
你所采取的是正确的,我认为一些发票没有价值,请使用试试,
def total_amount
price = self.try(:PRICE) || 0
units = self.try(:UNITS) || 0
price * units
end
make 0
如果没有相应的字段值,那么您就不会收到错误。