Проблемы с методом limit в Rails 3.2 и упорядочением хэшей - PullRequest
0 голосов
/ 24 февраля 2012

У меня есть база данных с городами, у которых 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

1 Ответ

1 голос
/ 24 февраля 2012

Просто используйте родной Ruby sort.

popularcities = City.order("businesses_count desc").limit(20)
@cities = popularcities.sort_by(&:name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...