2014-11-25 2 views
0

Например, у меня есть несколько Example объектов в базе данных.Смещение ActiveRecord, за которым следует среднее значение

#<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) 

, чтобы получить их.

Я хотел бы узнать среднее значение some_field среди этих 2 объектов (объект 1 и объект 2). Я

examples.average(:some_field) 

Я тогда получить ноль вызывают SQL-то вроде

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

кажется, что то, что происходит в том, что смещение применяется после вычисления среднего.
Решение, которое я использую, - это литье коллекции в массив и управление массивом.
Но интересно, есть ли способ выполнить это в стиле ActiveRecord с отношениями AR?

Спасибо!

ответ

0

Это был бы один из способов его достижения. И вы можете расширить его, чтобы включить другие строки, которые вы не заинтересованы в вычислении.

freshest_id = Example.order(:id :desc).first 
Example.where.not(id: freshest_id).average(:some_field) 
Смежные вопросы