настраиваемый агрегат activerecord - PullRequest
0 голосов
/ 21 февраля 2011

Давайте рассмотрим таблицу изображений со столбцами (id, location_id, созданный_кат, счетчик_1, счетчик_2), следующий запрос работает нормально: он дает мне самую последнюю картинку для каждого местоположения:

Image.where(:created_at => Image.maximum(:created_at, :group => :location_id).values)

Но теперь я хотел бы, чтобы для каждого местоположения было изображение, которое имеет максимум (counter_1 + 3 * counter_2) и следующий запрос не работает (и семантически неверен, а просто объясняет, чего я хочу достичь):

Image.where("counter_1 + 3*counter_2" => Image.maximum("counter_1 + 3*counter_2", :group => :location_id).values)

Я понимаю, почему это не работает, но я не знаю, как это изменить и заставить это работать. Есть ли способ, которым я могу определить пользовательскую функцию агрегата? Любая другая идея?

1 Ответ

0 голосов
/ 21 февраля 2011

попробуйте

Image.group(:location_id).order("(counter_1 + 3*counter_2) DESC")

UPD

Image.select("*, (counter_1 + 3*counter_2) as counter").group(:location_id).order("counter DESC")
...