2014-03-27 86 views
0

我想计算包含的所有文件某些领域的嵌入式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不会访问真正的对象。那么你如何正确引用这个模型本身的嵌入式文件呢?

回答

1

尝试Criteria#sum方法

points.sum(:distance) 
+0

谢谢,但我得到了同样的结果。我在这个问题中增加了更多细节来澄清。 –