如何从用户数组中提取电子邮件
如果我做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
这将确保实际用户对象在需要之前不会加载到内存中。