2017-10-13 2 views
0

J'ai deux modèles: école et adresse. Maintenant, j'ai besoin de construire la portée dans le modèle de l'école pour obtenir des écoles triées en fonction de l'occurrence des villes dans la table d'adresses. Donc, je dois résultat suivant:Trier les enregistrements selon la valeur dans le modèle associé

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 

J'ai écrit ceci: School.joins (: adresse) .group ("schools.id, addresses.city") de commande ("addresses.city ASC") mais cela ne. permet de regrouper les enregistrements par villes et d'ignorer l'occurrence.

Répondre

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

Malheureusement, ne fonctionne pas sur Postgresql. Requiert schools.id dans la clause de regroupement. J'ai ajouté ceci mais le résultat de la requête est faux. – user2942937

+0

Réponse mise à jour. @ user2942937 – ninjarails