У меня есть база данных с городами, у которых has_many: предприятия
Я хочу отобразить список из 20 городов. В этих 20 городах должно быть больше всего предприятий. Только если в менее чем 20 городах есть хотя бы один бизнес, я добавляю города с наибольшим количеством жителей в этот список из 20 городов. Так как города в моей базе данных упорядочены жителями, в этом случае я могу просто взять первые по id.
Мой запрос сейчас:
popularcities = City.order("businesses_count desc").limit(20)
enterprises_count - это столбец в моей базе данных с указанием количества предприятий в городе.
Теперь я получаю список из 20 предприятий, заказанных business_count. Те из них, у которых больше всего предприятий, а остальные (без предприятий) - самые крупные, все кажется идеальным.
В качестве последнего шага я хочу отсортировать этот список из 20 городов по названию "asc". Но если я сделаю это, Rails снова упорядочит весь список городов в моей базе данных (> 1.000), а не только список 20. Таким образом, предварительная сортировка по городам с наибольшим количеством предприятий теряется. Если я проверяю локальную переменную "PopularCities" с помощью отладчика перед окончательной сортировкой, я получаю правильный хэш из 20 записей.
Как я могу убедиться, что Rails наконец-то просто упорядочивает мой список 20 по имени name asc, а не всю базу данных со всеми городами?
Вот соответствующая часть кода в моем городском контроллере:
popularcities = City.order("businesses_count desc").limit(20) #gives me a list with the cities I need
@cities = popularcities.order("name asc") #gives me a list of all >1.000 cities sorted by name