如何将每个价格添加到当前价格?

时间:2013-10-19 03:26:57

标签: ruby-on-rails ruby rails-activerecord

我正在尝试编写一种方法,可以找到每个价格并将其添加到当前价格。

Quote.rb:

class Quote < ActiveRecord::Base
  has_many :items

  def calc_price
    sum = 0
    items.each do |item|
      item.price
    end
    sum = (item1 + item2 etc)
  end
end

5 个答案:

答案 0 :(得分:2)

items.inject(0){|sum, item| sum += item.price}

答案 1 :(得分:1)

这是关于当前红宝石的一个很好的功能:

values = [1,2,3,4,5]
values.inject(:+) # => 15

现在,那就是说,你正在使用数据库,所以要记录sum。来自文档:

  

计算给定列的值之和。返回的值与列的数据类型相同,如果没有行,则返回0。有关选项,请参阅计算示例。

Person.sum('age') # => 4562

答案 2 :(得分:1)

在这种情况下,您可以将计算卸载到数据库中。

def total_price
  items.sum('price')
end

参考:http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-sum

答案 3 :(得分:0)

您需要在.each循环

中汇总价格
class Quote < ActiveRecord::Base
  has_many :items

  def calc_price
    sum = 0
    items.each do |item|
      sum += item.price
    end
  end
end

您可以使用

进一步将该循环压缩为单行
items.each {|item| sum += item.price}

答案 4 :(得分:0)

怎么样

items.map(&:price).inject(0, :+)

地图部分将items数组映射到价格数组,注入部分从0开始并添加价格数组的每个元素。

Mapping StackOverflow question

inject docs

inject examples