Рельсы: порядок по сумме двух столбцов - PullRequest
7 голосов
/ 19 августа 2011

Итак, у меня есть модель Photo, которую можно загрузить в full_size и presentation_size.Когда пользователь загружает фотографию, я отслеживаю ее по атрибуту full_downloads и presentation_downloads.

Это все хорошо.

Иногда я хочу узнать, сколько всего загрузок было.У меня есть простой метод, total_downloads, который выглядит так:

def total_downloads
  self.full_downloads + self.presentation_downloads
end

Мой вопрос: Я хотел бы иметь возможность заказать фотографии по всем трем из них (полный,презентация, всего закачек).Первые два легко, но как сделать заказ по сумме двух столбцов?Обратите внимание, что это должно быть как SQLite, так и PG-совместимым как минимум.

Дополнительный вопрос: будет ли быстрее сделать метод total_downloads запросом, и если да, то как лучше написать это?Я знаю, что для суммирования по классу вы можете позвонить Photo.sum(...), но я не уверен, как это сделать для двух столбцов на одной записи.

Спасибо!

Ответы [ 2 ]

17 голосов
/ 19 августа 2011

Вы можете попробовать это:

Photo.order('full_downloads + presentation_downloads')

Он выполнит этот SQL-запрос:

SELECT "photos".* FROM "photos" ORDER BY full_downloads + presentation_downloads

Это потенциально медленный процесс.Если у вас большой набор данных и вы часто используете этот порядок сортировки, вам следует рассмотреть возможность создания столбца total_downloads и пересчета его значения при изменении столбца full_downloads или presentation_downloads записи.

3 голосов
/ 19 августа 2011

Photo.order('full_downloads + presentation_downloads DESC')

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

...