从一组对象中提取id

时间:2013-09-12 08:20:43

标签: ruby-on-rails ruby-datamapper

我有一组学生对象。我想只得到所有学生的ids。学生模型在Datamapper中实现。我是Ruby on Rails和Datamapper的新手。有没有什么方法可以让我收集所有收集学生的学生。所以基本上我想要以下内容:

 students = Student.all 
 ids = students.get_ids

我不知道如何实现get_ids。

4 个答案:

答案 0 :(得分:1)

变量“students”是一个数组,你不应该在它上面应用get_ids。 该函数应该没有参数。

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

答案 1 :(得分:0)

您需要fields

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

查看更多:How to fetch only specified fields of model with DataMapper?

答案 2 :(得分:0)

如果您确实需要所有学生对象,请使用students.map(&:id),它是students.map{|s| s.id}的缩写,并返回所有ID的数组。

要直接从数据库中获取ID,请使用Student.where(...).pluck(:id)而不使用all,这比实例化所有学生对象要快得多且占用内存更少。

修改 抱歉,pluck方法仅限ActiveRecord。但其他答案可以选择fields选项。

答案 3 :(得分:0)

如果您只想获得有效的记录关系,请尝试以下方法:

Student.select(:id)

这应该返回与每个对象中的所有对象和ID的ActiveRecord关系。

如果您想要的不是ActiveRecord关系,而只是ids,请使用简单的“pluck”方法

Student.pluck(:id)