我想根据他们的成绩找到一份有顺序的跑步者名单。
模型
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….]
但如果结果丢失(零),则不包括跑步者有没有办法让所有的跑步者都回来?
干杯
最佳答案
不包括没有结果的运行程序,因为:include
只会带来最小化查询数的数据,以避免对数据库的N+1命中您需要执行外部:join
以包括所有跑步者,无论他们是否有结果。
ordered_runners = race.runners.all(:joins => "left outer join results on runners.id = results.runner_id", :order => 'results.position ASC')
根据迁移列/表名和数据库检查此代码。