在Rails中采集和采集有什么区别?

这里有两个示例代码。

第一个与collect

 User.first.gifts.collect(&:id) 

第二个pluck

 User.first.gifts.pluck(:id) 

他们在表演或其他方面有什么区别吗?

pluck是在数据库级别。 它只会查询特定的字段。 看到这个

当你这样做时:

  User.first.gifts.collect(&:id) 

你有加载所有领域的对象,你只需要得到的id感谢基于Enumerable的方法。

所以:

  • 如果你需要Rails 4的id ,使用idsUser.first.gifts.ids

  • 如果你需要Rails 4的一些字段,可以使用User.first.gifts.pluck(:id, :name, ...)User.first.gifts.pluck(:id, :name, ...)

  • 如果您需要Rails 3的一个字段,请使用User.first.gifts.pluck(:id)User.first.gifts.pluck(:id)

  • 如果你需要所有的领域,使用collect

  • 如果你需要Rails 4的某些领域,仍然使用pluck

  • 如果你需要Rails 3的某些领域,请使用selectcollect

是。 根据Rails指南 , pluck直接将数据库结果转换为array ,而不构buildActiveRecord对象。 这意味着对于大型或经常运行的查询来说性能更好。

除了@ apneadiving的答案, pluck可以采取单个和多个列名作为参数:

 Client.pluck(:id, :name) # SELECT clients.id, clients.name FROM clients # => [[1, 'David'], [2, 'Jeremy'], [3, 'Jose']] 

基本和主要区别是Pluck适用于数据库级别并收集所有数据,然后在您需要所有logging时使用collect收集所有数据然后返回logging,当less数字段使用pluck时