以下是两个示例代码。在Rails中采集和采集有什么区别?
首先一个与collect
:
User.first.gifts.collect(&:id)
第二个与pluck
:
User.first.gifts.pluck(:id)
有没有在性能上还是其他什么东西它们之间有什么区别?
以下是两个示例代码。在Rails中采集和采集有什么区别?
首先一个与collect
:
User.first.gifts.collect(&:id)
第二个与pluck
:
User.first.gifts.pluck(:id)
有没有在性能上还是其他什么东西它们之间有什么区别?
pluck
处于db级别。它只会查询特定的字段。 See this。
当你这样做:
User.first.gifts.collect(&:id)
您有加载的所有字段的对象,你只是得到id
由于基于可枚举的方法。
所以:
如果你只需要id
使用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
是的。 According to Rails guides,pluck
直接将数据库结果转换为array
,而不构建ActiveRecord
对象。这意味着对于大型或经常运行的查询来说性能更好。
除了@ apneadiving的回答,pluck
可以采取单个和多个列名作为参数:
Client.pluck(:id, :name)
# SELECT clients.id, clients.name FROM clients
# => [[1, 'David'], [2, 'Jeremy'], [3, 'Jose']]
的基本和主要的区别是普吕克适用分贝的水平,并收集得到的所有数据,然后返回记录到你 当你需要所有记录使用收集和当几个领域然后使用采摘
太棒了。非常感谢。 –
我本来应该在同一时间接受答案。计算器给我的错误:您可以在9分钟接受的答案:) –
我明白了,没有什么问题,只是提醒一下;) – apneadiving