Rails sum方法返回undefined

时间:2016-11-02 12:51:51

标签: ruby-on-rails ruby ruby-on-rails-4.2

生成以下错误undefined method +' for #<Debit

控制器操作定义

@debits = Debit.order("vatunitid ASC").where('unit_id = ? AND folio_id = ?', session[:unit_id], @folio.id).to_a
@adhoc_folios = Folio.order("created_at asc").where(['checkout IS NULL AND unit_id = ? AND id != ?', session[:unit_id], @folio.id]).all
@vatunits = Vatunit.where(['unit_id = ?', session[:unit_id]]).to_a
@rates = @debits.map(&:vatunitid).uniq

目前在视图中(用于测试目的)

 @rates.each do |rate| 
   @debits_for_rate = @debits.select{ |i| i.vatunitid == rate } 
   @debits_for_rate.count 
   @debits_for_rate.sum(:amount) 

count指令返回正确的值
在这一点上,对金额的要求被认为是不存在的。

这是怎么发生的以及如何克服它?

2 个答案:

答案 0 :(得分:5)

通过将AR转换为数组,然后执行Ruby操作,而不是使用数据库级别计算,您可以以低效的方式执行此操作。

但要解决这个问题,你应该选择:

@debits_for_rate.sum(&:amount) 

答案 1 :(得分:0)

因为你的@debits_for_rate是一个对象而不是数字数组。

@debits_for_rate.sum(&:amount) 其他

@debits_for_rate.map(&:amount).inject(:+)

这将取得你的总和。