Активная запись: упорядочивание находок, а также возврат нулей - PullRequest
2 голосов
/ 01 марта 2010

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

модель

class Race < ActiveRecord::Base
 has_many :runners, :dependent => :destroy
end

class Runner < ActiveRecord::Base
  belongs_to :race
  has_one :result, :dependent => :destroy
end

class Result < ActiveRecord::Base
  belongs_to :runner
end

пытается использовать что-то вроде этого

ordered_runners = race.runners.all(:include => :result, :order => 'results.position ASC')

позиция - их конечная позиция, т.е. [1,2,3,4 ....]

но если результат отсутствует (ноль), бегун не включается. Есть ли способ сделать это и вернуть всех бегунов?

ура

Ответы [ 2 ]

3 голосов
/ 01 марта 2010

Бегуны без результатов не включены, потому что :include только вводит данные, минимизируя количество запросов, чтобы избежать N + 1 попаданий в базу данных. Вы хотите сделать внешний :join, чтобы включить всех бегунов, независимо от того, есть ли у них результат или нет.

ordered_runners = race.runners.all(:joins => "left outer join results on runners.id = results.runner_id", :order => 'results.position ASC')

Проверьте этот код на основе имен столбцов миграции / таблиц и базы данных.

0 голосов
/ 01 марта 2010

Это должно вернуть бегунов с нулевым результатом:

race.runners.all(:include => :result, :conditions => "results IS NULL",  :order => 'results.position ASC')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...