Moh*_*ain 117 ruby ruby-on-rails rails-activerecord
这是两个示例代码.
第一个collect:
User.first.gifts.collect(&:id)
Run Code Online (Sandbox Code Playgroud)
第二个pluck:
User.first.gifts.pluck(:id)
Run Code Online (Sandbox Code Playgroud)
他们在表现或其他方面有什么不同吗?
apn*_*ing 220
pluck在数据库级别上.它只会查询特定字段.看到这个.
当你这样做时:
User.first.gifts.collect(&:id)
Run Code Online (Sandbox Code Playgroud)
你有加载了所有字段的对象,你只需要id感谢基于Enumerable的方法.
所以:
如果您只需要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
Num*_*ers 26
是.根据Rails指南,pluck直接将数据库结果转换为a array,而不构造ActiveRecord对象.这意味着对于大型或经常运行的查询,性能会更好.
除@ apneadiving的答案外,pluck还可以将单个和多个列名称作为参数:
Client.pluck(:id, :name)
# SELECT clients.id, clients.name FROM clients
# => [[1, 'David'], [2, 'Jeremy'], [3, 'Jose']]
Run Code Online (Sandbox Code Playgroud)