如何从用户数组中提取电子邮件

如果我做User.all.pluck(:email)那么它工作正常。

但如果我这样做

 arr = Array.new arr = User.all 

然后

 arr.pluck(:email) 

这引起了以下错误

 undefined method `pluck' for # 

这意味着我不能使用数组,所以我们如何从上面的一行记录数组中获取特定的字段值。 我不想循环遍历数组中的每个记录

pluck对于执行极简主义数据库查询很有用。

当你有一个数组时,只需使用map

 arr.map(&:email) 

使用collect ,这是一个Array方法:

 arr.collect{|u| u.email} 

pluck(:x)相当于ActiveRecord集合上的select(:x).map(&:x)

如果你有一个数组, Array#map和它的别名Array#collect做同样的工作。

如果你使用

User.scoped.pluck(:email)

你的查询就像

SELECT users.email FROM users

所以,回答这个问题,你不能在数组上使用pluck, pluck是一个ActiveRecord::Calculations方法,而不是一个数组。

以这种方式转换为数组是一个内存hogger。 相反,你可以使用:

 arr = User.scoped arr.pluck :email 

或者更容易阅读:

 User.scoped.pluck :email 

这将确保实际用户对象在需要之前不会加载到内存中。