这是两个示例代码。
第一个带有collect
:
User.first.gifts.collect(&:id)
第二个与
pluck
:User.first.gifts.pluck(:id)
它们之间在性能或其他方面有什么区别吗?
最佳答案
pluck
在数据库级别。它将仅查询特定字段。 See this。
当您这样做时:
User.first.gifts.collect(&:id)
您拥有装载了所有字段的对象,并且由于基于Enumerable的方法,您只需获得
id
。所以:
id
,请使用ids
:User.first.gifts.ids
pluck
:User.first.gifts.pluck(:id, :name, ...)
pluck
:User.first.gifts.pluck(:id)
collect
pluck
和select