这是两个示例代码。
第一个collect
:
User.first.gifts.collect(&:id)
第二个pluck
:
User.first.gifts.pluck(:id)
它们之间在性能或其他方面有什么区别吗?
这是两个示例代码。
第一个collect
:
User.first.gifts.collect(&:id)
第二个pluck
:
User.first.gifts.pluck(:id)
它们之间在性能或其他方面有什么区别吗?
Answers:
pluck
在数据库级别。它只会查询特定的字段。看到这个。
当您这样做时:
User.first.gifts.collect(&:id)
您拥有装载了所有字段的对象,并且您只需要id
感谢基于Enumerable的方法。
所以:
如果只需要id
with Rails 4,请使用ids
:User.first.gifts.ids
如果您只需要Rails 4的某些字段,请使用pluck
:User.first.gifts.pluck(:id, :name, ...)
如果您只需要Rails 3的一个字段,请使用pluck
:User.first.gifts.pluck(:id)
如果需要所有字段,请使用collect
如果您需要Rails 4的某些字段,请继续使用 pluck
如果您需要Rails 3的某些字段,请使用select
和collect
pluck
多个字段,Rails 3不支持,除非您使用Ryan Lefevre的变通方法
如果存在使用检索到的记录的少量属性的情况。在这种情况下,您应该使用pluck
。
User.collect(&:email)
在上面的示例中,如果您只需要电子邮件属性,那么您将浪费内存和时间。因为它将从数据库的用户表中检索所有列,所以为每个属性(包括您永远不会使用的属性)分配内存
注意:pluck
不返回用户的ActiveRecord_Relation
pluck
多个属性,例如pluck(:id, :name)
吗?