我想计算嵌入的1-N Mongoid关系中包含的所有文档中某些字段的总和:
class Trip
include Mongoid::Document
embeds_many :points
field :total_distance, type: Integer, default:->{ calc_total_dist }
def calc_total_dist
points.each.inject(0){|sum, point| sum + point.distance}
end
end
class Point
include Mongoid::Document
embedded_in :trip
field :distance, type: Integer
end
我的想法是这样的:
p1 = Point.new(:distance=>1000*30)
p2 = Point.new(:distance=>1000*20)
t = Trip.new
t.points << [p1, p2]
t.save
t.total_distance # should be equal to 1000*(30+20)
当total_distance
应该通过default
操作计算时,它不起作用(在上面的示例中,total_distance
返回0)。
但是,当在模型实例上调用相同的代码时,它确实有效:
t.points.each.inject(0){|sum, point| sum + point.distance}
t.points.sum(:distance)
在calc_total_dist
方法中,points
似乎无法访问真实对象。那么如何正确引用在模型本身中的嵌入式文档?
答案 0 :(得分:1)
尝试Criteria#sum
方法
points.sum(:distance)