0

私は2つのモデルを持っています

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?

このクエリをどのように記述できますか? 出来ますか?

解決済み: 解決策を解決しました。ハックですが、SQL ステートメントを作成できるようになるまでは、今のところ機能します。基本的に、選択した場所をループし、場所ごとに人を数え、人の数を含む仮想属性を追加し、ハッシュの配列を並べ替えました。

4

2 に答える 2

0

条件付き結合に関するアクティブ レコード ガイドのセクションをご覧ください。正しい方向を示しているはずです。

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 に答える