这是两个示例代码。

第一个带有collect:

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

第二个与pluck:
User.first.gifts.pluck(:id)

它们之间在性能或其他方面有什么区别吗?

最佳答案

pluck在数据库级别。它将仅查询特定字段。 See this

当您这样做时:

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

您拥有装载了所有字段的对象,并且由于基于Enumerable的方法,您只需获得id

所以:
  • 如果仅需要Rails 4的id,请使用ids:User.first.gifts.ids
  • 如果仅需要使用Rails 4的某些字段,请使用pluck:User.first.gifts.pluck(:id, :name, ...)
  • 如果您仅需要与Rails 3关联的一个字段,请使用pluck:
  • 如果您需要所有字段,请使用User.first.gifts.pluck(:id)
  • 如果需要Rails 4的一些字段,请仍然使用collect
  • 如果需要Rails 3的某些字段,请使用pluckselect
  • 10-07 21:16