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

Rah*_*ngh 25 ruby ruby-on-rails

如果我这样做User.all.pluck(:email)那就行了.

但如果我这样做

arr = Array.new
arr = User.all
Run Code Online (Sandbox Code Playgroud)

然后

arr.pluck(:email)
Run Code Online (Sandbox Code Playgroud)

这引起了以下错误

undefined method `pluck' for #<Array:0x007f4ff8daf3c8>
Run Code Online (Sandbox Code Playgroud)

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

apn*_*ing 58

pluck 用于执行极简主义数据库查询.

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

arr.map(&:email)
Run Code Online (Sandbox Code Playgroud)

  • 也许。但是替换 `arr = User.all ; arr.map` 和 `User.pluck` 更优化。他的问题是关于是否可以改变 DB 的初始选择的问题是模棱两可的。我只是认为让 DB 提供您需要的内容而不是在获取数据后操作数据的性能改进值得考虑。 (2认同)

ste*_*ser 10

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

arr.collect{|u| u.email}
Run Code Online (Sandbox Code Playgroud)


xle*_*ras 6

pluck(:x)相当于select(:x).map(&:x)一个ActiveRecord集合.

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

如果你使用

User.scoped.pluck(:email)

你的查询就像

SELECT users.email FROM users

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