2014-01-23 68 views
0

我有候選人屬於一個區。區可以是district_type「大會」或「參議院」,候選人可以是現任(真/假)。我試圖通過他們所屬區的類型考生進行排序:ActiveRecord:根據其關係上的屬性排序記錄

assembly_nonincumbents = Candidate.where(:incumbent => true, :district.district_type => 'Assembly').order('LOWER(last_name) ASC') 

但是,這是給我的錯誤:未定義的方法`district_type」爲:地區:符號

回答

1

該解決方案將篩選候選人按分區使用子查詢。我認爲這就是你想要做的。

assembly_incumbents = Candidate.where(
    incumbent: true, 
    district_id: District.where(district_type: "Assembly") 
).order("LOWER(last_name)") 

UPDATE

如果你希望你的結果集被列在您的districts表訂購你需要做加盟,這將是這個樣子:

Candidate.joins(:district). 
      where(incumbent: true). 
      where("districts.district_type = ?", "Assembly"). 
      order("districts.district_number, LOWER(last_name)") 

類似的東西應該可以工作,並且首先按district_number排序,然後按名稱排序(所以如果第37區有4個候選人,他們都會在36區候選人之後出現,但是會被排序b y名稱在區37名候選人名單內)。

+0

這是有效的,但我實際上也試圖按區的district_number排列候選人。這是可能的類似的手段? –

+0

@DuncanMalashock在這種情況下,你需要一個連接。我會嘗試用一個例子來更新我的答案。 –