在嵌入式1-N Mongoid模型中访问和求和字段

时间:2014-03-27 08:30:33

标签: ruby mongoid

我想计算嵌入的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 个答案:

答案 0 :(得分:1)

尝试Criteria#sum方法

points.sum(:distance)