我希望根据结果找到一个有序的跑步者名单。
模型
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 ....]
但是如果结果丢失(零)则不包括跑步者。有没有办法做到这一点,并返回所有跑步者?
欢呼声
答案 0 :(得分:3)
不包括没有结果的运行者,因为:include
仅引入数据,最大限度地减少了查询次数,以避免N + 1命中数据库。你想做一个外部:join
来包括所有参赛者,无论他们是否有结果。
ordered_runners = race.runners.all(:joins => "left outer join results on runners.id = results.runner_id", :order => 'results.position ASC')
根据您的迁移列/表名和数据库检查此代码。
答案 1 :(得分:-1)
这应该返回带有null结果的跑步者:
race.runners.all(:include => :result, :conditions => "results IS NULL", :order => 'results.position ASC')