2017-10-13 7 views
0

私は2つのモデルを持っています:学校と住所。関連するモデルの値に基づいてレコードをソート

Address 
    has_many :schools 

School 
    belongs_to :address 

    t.bigint "address_id" 

今私は学校がアドレステーブル内の都市の出現に応じてソートを取得するために学校のモデルにスコープを構築する必要があります。 School.joins(:アドレス).group( "schools.id、addresses.city")の順序( "addresses.cityのASC")が、これだけ。私はこれを書いた

School_1 | City_most_popular 
School_2 | City_most_popular 
School_3 | City_most_popular 
School_4 | City_most_popular 
School_5 | City_quite_popular 
School_6 | City_quite_popular 
School_7 | City_not_popular 

:だから私は、次の結果が必要都市別にレコードをグループ化し、発生を無視することができます。

答えて

1
School 
.joins(:address) 
.select('schools.*, count(*) OVER (PARTITION BY addresses.city) AS count') 
.order('count DESC') 
+0

残念ながら、PostgreSQLを使用していません。グループ化節にschools.idが必要です。私はこれを追加しましたが、クエリ結果は間違っています。 – user2942937

+0

更新された回答。 @ user2942937 – ninjarails

関連する問題