2014-03-27 88 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

謝謝,但我得到了同樣的結果。我在這個問題中增加了更多細節來澄清。 –