1

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

报价.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
4

5 回答 5

2
items.inject(0){|sum, item| sum += item.price}
于 2013-10-19T03:55:02.487 回答
1

这是一个关于更新的红宝石的好功能:

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

现在,就是说,您正在使用数据库,所以有它sum的记录。从文档中:

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

Person.sum('age') # => 4562
于 2013-10-19T03:40:55.053 回答
1

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

def total_price
  items.sum('price')
end

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

于 2013-10-19T03:41:09.687 回答
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}
于 2013-10-19T03:30:00.543 回答
0

怎么样

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

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

映射 StackOverflow 问题

注入文档

注入示例

于 2013-10-19T03:39:38.153 回答