我想根据他们的成绩找到一份有顺序的跑步者名单。
模型

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')

根据迁移列/表名和数据库检查此代码。

08-07 18:35