2013-04-02 39 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