2012-08-29 33 views

回答

179

pluck处于db级别。它只会查询特定的字段。 See this

当你这样做:

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

您有加载的所有字段的对象,你只是得到id由于基于可枚举的方法。

所以:

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

  • 如果你需要使用Rails 4某些领域,使用pluckUser.first.gifts.pluck(:id, :name, ...)

  • 如果你需要一个字段使用Rails 3,使用pluckUser.first.gifts.pluck(:id)

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

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

  • 如果您需要Rails 3的某些字段,请使用selectcollect

+0

太棒了。非常感谢。 –

+0

我本来应该在同一时间接受答案。计算器给我的错误:您可以在9分钟接受的答案:) –

+0

我明白了,没有什么问题,只是提醒一下;) – apneadiving

20

是的。 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']] 
2

的基本和主要的区别是普吕克适用分贝的水平,并收集得到的所有数据,然后返回记录到你 当你需要所有记录使用收集和当几个领域然后使用采摘