Rails 3: Как получить массив имен всех людей? - PullRequest
1 голос
/ 12 марта 2011
Модель

Person имеет поле name.

Я хотел бы получить массив имен всех людей.

Если несколько человек имеют одно и то же имя, я бы хотел, чтобы оно появилось в массиве только один раз.

Я построил массив следующим образом:

Person.all.map{ |p| p.name }.uniq

Есть ли лучший / более эффективный способ сделать это?

Ответы [ 2 ]

7 голосов
/ 12 марта 2011

Ваше решение достаточно для небольших наборов данных, но оно неэффективно для больших наборов данных, поскольку ваш запрос извлекает все записи Person из базы данных, прежде чем сортирует их в коде приложения.

Лучше разрешить базе данных выполнять тяжелую работу с большими объемами данных, поэтому более быстрый и эффективный подход состоял бы в том, чтобы база данных сначала отфильтровывала отдельные записи:

Person.select('distinct name').collect { |p| p.name }
3 голосов
/ 12 марта 2011

Перенос работы в базу данных при любой возможности. Кроме того, используйте sym.to_proc, чтобы сделать оператор более кратким для сбора:

Person.select («отличное имя»). Collect (&: name)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...