我正在尝试编写一种方法,可以找到每个价格并将其添加到当前价格。
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
答案 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开始并添加价格数组的每个元素。