当数据来自模型方法时,Rails显示总列

时间:2016-10-24 07:59:11

标签: ruby-on-rails

我有一个模型发票

表发票: 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),那么没有错误,但值显然是错误的。

2 个答案:

答案 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如果没有相应的字段值,那么您就不会收到错误。