活动记录:排序查找并返回空值

时间:2010-03-01 01:42:45

标签: ruby-on-rails ruby activerecord find

我希望根据结果找到一个有序的跑步者名单。

模型

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 个答案:

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