我正在尝试编写一种方法来查找每个价格并将其添加到当前价格中。
报价.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
我正在尝试编写一种方法来查找每个价格并将其添加到当前价格中。
报价.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
items.inject(0){|sum, item| sum += item.price}
这是一个关于更新的红宝石的好功能:
values = [1,2,3,4,5]
values.inject(:+) # => 15
现在,就是说,您正在使用数据库,所以有它sum
的记录。从文档中:
计算给定列上的值的总和。返回的值与列的数据类型相同,如果没有行,则返回 0。有关选项的示例,请参见计算。
Person.sum('age') # => 4562
在这种情况下,您可以将计算卸载到数据库。
def total_price
items.sum('price')
end
参考:http ://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-sum
您需要对.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}
怎么样
items.map(&:price).inject(0, :+)
map 部分将 items 数组映射到价格数组,inject 部分从 0 开始并添加价格数组的每个元素。