如何从用户阵列中提取电子邮件

时间:2014-02-20 07:34:52

标签: ruby-on-rails ruby

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

但如果我这样做

arr = Array.new
arr = User.all

然后

arr.pluck(:email)

这会引发以下错误

undefined method `pluck' for #<Array:0x007f4ff8daf3c8>

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

4 个答案:

答案 0 :(得分:57)

pluck对于进行极简主义数据库查询非常有用。

如果您有阵列,只需使用map

arr.map(&:email)

答案 1 :(得分:8)

使用collect,这是一个数组方法:

arr.collect{|u| u.email}

答案 2 :(得分:6)

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

如果您有一个数组,Array#map及其别名Array#collect执行相同的工作。

如果您使用

User.scoped.pluck(:email)

您的查询就像

SELECT users.email FROM users

因此,要回答这个问题,你不能使用数组,pluckActiveRecord::Calculations方法,而不是数组。

答案 3 :(得分:1)

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

arr = User.scoped
arr.pluck :email

或更容易阅读:

User.scoped.pluck :email

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