在Rails中采集和采集有什么区别?
这里有两个示例代码。
第一个与collect
:
User.first.gifts.collect(&:id)
第二个pluck
:
User.first.gifts.pluck(:id)
他们在表演或其他方面有什么区别吗?
pluck
是在数据库级别。 它只会查询特定的字段。 看到这个
当你这样做时:
User.first.gifts.collect(&:id)
你有加载所有领域的对象,你只需要得到的id
感谢基于Enumerable的方法。
所以:
-
如果你只需要Rails 4的
id
,使用ids
:User.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的某些领域,请使用
select
和collect
是。 根据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时