2013-04-02 40 views
0

訂單記錄數我有兩個型號查詢通過協會

class Location < ActiveRecord::Base 
    has_many :people, :as => :person 
end 

class People < ActiveRecord::Base 
    belongs_to :person, :polymorphic => true 
end 

我想運行一個Location where子句。然後,我想排序查詢,以便與其關聯最多的人員的位置是第一位,然後按降序順序排列。

Location.where(place: "Waffle House")#Some query attached to this, but what do I write? 

如何編寫此查詢?可能嗎?

求解:解決了這個問題。儘管它現在可以工作,直到我可以創建一條SQL語句。基本上通過選定的位置循環,計算每個位置的人員,並添加一個虛擬屬性與人數,並對散列數組進行排序。

回答

0

看看關於條件連接的活動記錄指南部分,應該指出你在正確的方向。

http://guides.rubyonrails.org/active_record_querying.html#specifying-conditions-on-the-joined-tables

+0

它把我在正確的方向,但我不認爲這是我需要什麼。我有一個「位置」查詢列表,我需要根據每個「位置」關聯的人數來排序。 – jason328

+0

如果API太簡單,可以直接寫在http://guides.rubyonrails.org/active_record_querying.html#finding-by-sql – muttonlamb

0

試試這個:

Location.joins("(
    SELECT person_id location_id, COUNT(1) people_count 
    FROM people 
    WHERE person_type = 'Location' 
    GROUP BY person_id 
) a ON a.location_id = locations.id" 
).order("a.people_count DESC") 
+0

謝謝,我會解密它並看看怎麼運行的。 – jason328