0

我有两个模型

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

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

我想运行Locationwhere 子句。然后我想对查询进行排序,以便与它相关联的人最多的位置排在第一位,然后按降序排列。

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

我该如何编写这个查询?可能吗?

已解决:解决了解决方案。虽然 hacky 它现在可以工作,直到我可以创建一个 SQL 语句。基本上遍历选定的位置,计算每个位置的人数,并添加一个虚拟属性和人数,并对哈希数组进行排序。

4

2 回答 2

0

查看有关条件连接的 Active Record Guide 部分,应该会为您指明正确的方向。

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

于 2013-04-02T00:23:33.717 回答
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")
于 2013-04-02T03:39:55.830 回答