2010-03-01 68 views
2

我想根據其結果找到有序的跑步者列表。活動記錄:排序查找並返回空值

車型

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 ......]

但如果結果缺失(零),那麼亞軍不包括在內。有沒有辦法做到這一點,並返回所有跑步者?

歡呼

回答

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

這應該用一個空結果返回的參賽者:

race.runners.all(:include => :result, :conditions => "results IS NULL", :order => 'results.position ASC')