Rails 求和方法 returns 未定义
Rails sum method returns undefined
生成以下错误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)
计数指令returns一个合适的值
此时调用 sum 被认为是不存在的。
这是怎么发生的以及如何克服它?
因为你的@debits_for_rate 是一个对象而不是数字数组。
@debits_for_rate.sum(&:amount)
否则
@debits_for_rate.map(&:amount).inject(:+)
这将为您计算总和。
您将 AR 转换为数组,然后执行 Ruby 操作,而可以改用数据库级别的计算,这样做效率低下。
但要解决这个特定问题,您应该使用:
@debits_for_rate.sum(&:amount)
生成以下错误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)
计数指令returns一个合适的值
此时调用 sum 被认为是不存在的。
这是怎么发生的以及如何克服它?
因为你的@debits_for_rate 是一个对象而不是数字数组。
@debits_for_rate.sum(&:amount)
否则
@debits_for_rate.map(&:amount).inject(:+)
这将为您计算总和。
您将 AR 转换为数组,然后执行 Ruby 操作,而可以改用数据库级别的计算,这样做效率低下。
但要解决这个特定问题,您应该使用:
@debits_for_rate.sum(&:amount)