2013-09-12 2 views
0

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

students = Student.all 
ids = students.get_ids 

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

ответ

1

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

def get_ids 
    Student.all.map { |student| student.id } 
end 
0

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

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

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

0

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

Student.select(:id) 

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

Если то, что вы хотите, это не отношение ActiveRecord, а только идентификаторы, идти с простой «срывать» метод

Student.pluck(:id) 
+0

Метод срывать тоже ActiveRecord. – user2503775