如何让self.read_attribute与聚合一起使用?

时间:2013-11-18 17:26:49

标签: ruby-on-rails ruby-on-rails-3.2

我有:

class Vehicle << ActiveRecord::Base

  def odometer
    metric ? self.read_attribute(:odometer).miles.to.kilometers : self.read_attribute(:odometer)
  end

end

metric = true和我vehicle.odometer它起作用时,我得到公里数。

但是当我调用聚合vehicles.sum(:odometer)时,它不起作用,好像没有调用方法里程表。

1 个答案:

答案 0 :(得分:1)

这可能是因为你的vehicles是一个ActiveRelation对象,并且对它的调用sum将使用sql查询计算总和(不使用你定义的方法)

生成的查询将是

select sum(vehicles.odometer) from vehicles where ...

如果要调用方法,请执行以下操作

 vehicles.sum(&:odometer)