Запрос ActiveRecord: порядок по сумме на включенной модели - PullRequest
4 голосов
/ 15 марта 2011
  • Project has_many: items
  • Товар принадлежит_: проект

Я пытаюсь отсортировать проекты по общей стоимости соответствующих предметов. Что-то вроде:

Project.includes(:items).order('SUM(items.price)')

С этим кодом ActiveRecord возвращает только первый проект. Чего мне не хватает?

Ответы [ 2 ]

8 голосов
/ 15 марта 2011

Я еще не пробовал v3, но я предполагаю, что это будет что-то вроде

Product.joins(:items).group('products.id').order('SUM(items.price)')
0 голосов
/ 15 марта 2011
Project.find_by_sql "
  select projects.* 
  from projects 
  left join (
    select project_id, sum(price) as items_sum
    from items 
    group by project_id) as sums on
  project.id = sums.project_id
  order by sums.items_sum

Выше SQL должен хорошо работать на большинстве систем БД (MySQL, PostgreSQL, ...).

Запись AR includes в основном используется в качестве решения для быстрой загрузки.И я не уверен, что вы можете использовать его таким образом - чтобы упорядочить записи родительской таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...