如果我User.all.pluck(:email)
,那么它可以正常工作。
但如果我这样做
arr = Array.new
arr = User.all
然后
arr.pluck(:email)
这会引发以下错误
undefined method `pluck' for #<Array:0x007f4ff8daf3c8>
这意味着我不能使用数组,所以我们如何从上面的一行中的记录数组中获取特定的字段值。 我不想遍历数组中的每条记录。
答案 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
因此,要回答这个问题,你不能使用数组,pluck是ActiveRecord::Calculations
方法,而不是数组。
答案 3 :(得分:1)
以这种方式转换为数组是一个内存hogger。相反,您可以使用:
arr = User.scoped
arr.pluck :email
或更容易阅读:
User.scoped.pluck :email
这将确保实际用户对象在需要之前不会加载到内存中。