我有一组学生对象。我想只得到所有学生的ids。学生模型在Datamapper中实现。我是Ruby on Rails和Datamapper的新手。有没有什么方法可以让我收集所有收集学生的学生。所以基本上我想要以下内容:
students = Student.all
ids = students.get_ids
我不知道如何实现get_ids。
答案 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)