Извлечение идентификаторов из коллекции объектов

У меня есть коллекция предметов студентов. Я хочу получить только идентификаторы всех студентов. Студенческая модель реализована в Datamapper. Я новичок в Ruby on Rails и Datamapper. Есть ли способ, чтобы я мог получить идентификатор всех студентов в коллекции студентов. Итак, в основном я хочу следующее:

 students = Student.all 
 ids = students.get_ids

Я не знаю, как реализовать get_ids.


person Joy    schedule 12.09.2013    source источник


Ответы (4)


Переменная «студенты» — это массив, к нему не следует применять get_ids. Функция не должна получать никаких параметров.

def get_ids
  Student.all.map { |student| student.id }
end
person Yehuda Zargarov    schedule 12.09.2013

Вам нужно fields

Student.all(:fields=>[:id])

Подробнее: Как получить только указанные поля модели с помощью DataMapper?

person user2503775    schedule 12.09.2013

Если вам действительно нужны все студенческие объекты, используйте students.map(&:id), который является сокращением от students.map{|s| s.id} и возвращает массив всех идентификаторов.

Чтобы получить идентификаторы непосредственно из вашей базы данных, используйте Student.where(...).pluck(:id) без all, что намного быстрее и требует меньше памяти, чем создание экземпляров всех объектов ученика.

Редактировать: Извините, метод щипка только ActiveRecord. Но у других ответов есть альтернатива с опцией fields.

person KappaNossi    schedule 12.09.2013

Если вы просто хотите получить активное отношение записи, попробуйте следующее:

Student.select(:id)

Это должно вернуть вам отношение ActiveRecord со всеми объектами и идентификаторами в каждом объекте.

Если вам нужно не отношение ActiveRecord, а просто идентификаторы, используйте простой метод «выщипывания».

Student.pluck(:id)
person derekyau    schedule 12.09.2013
comment
Метод выщипывания также является ActiveRecord. - person user2503775; 15.09.2013