ActiveRecord偏移后跟平均值

时间:2014-11-25 18:43:40

标签: ruby-on-rails ruby postgresql activerecord offset

例如,我在数据库中有很少Example个对象。

#<Example id: 1, some_field: 3>      
#<Example id: 2, some_field: 10>
#<Example id: 3, some_field: 4>

说,我想要除了最新鲜的每个物体。我的工作是

examples = Example.order('created_at desc').offset(1)

得到它们。

然后我想找出这两个对象(对象1和对象2)中some_field的平均值。我做了

examples.average(:some_field)

然后我得到nil导致SQL就像

SELECT AVG("examples"."some_field") AS avg_id FROM "examples" OFFSET 1

似乎所发生的是在平均计算后应用偏移 我使用的解决方案是将集合转换为数组并操作数组 但是我想知道,有没有办法用AR关系在ActiveRecord风格中执行它?

谢谢!

1 个答案:

答案 0 :(得分:0)

这将是实现它的一种方法。你可以扩展它以包括你没有兴趣计算的其他行。

freshest_id = Example.order(:id :desc).first
Example.where.not(id: freshest_id).average(:some_field)