2012-08-29 13 views

Respuesta

179

pluck está en el nivel db. Solo consultará el campo particular. See this.

Al hacer:

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

tiene objetos con todos los campos cargados y simplemente obtener los id gracias al método basado en Enumerable.

Así:

  • si única necesita el id con los carriles 4, utilice ids: User.first.gifts.ids

  • si única necesita algunos campos con los carriles 4, utilice pluck: User.first.gifts.pluck(:id, :name, ...)

  • si única necesita un campo con Rails 3, utilice pluck: User.first.gifts.pluck(:id)

  • si necesita todos campos, utilice collect

  • si necesita algunos campos con los carriles 4, seguir utilizando pluck

  • si necesita algunos campos con Rails 3, use select y collect

+0

Awesome. Muchas gracias. –

+0

Se suponía que debía aceptar la respuesta al mismo tiempo.Stackoverflow me dio el error: puede aceptar la respuesta después de 9 minutos :) –

+0

Entiendo, no hay problema, solo un recordatorio;) – apneadiving

20

Sí. According to Rails guides, pluck convierte directamente el resultado de una base de datos en array, sin construir objetos ActiveRecord. Esto significa un mejor rendimiento para una consulta grande o que se ejecuta a menudo.

Además de la respuesta de @ apneadiving, pluck puede tener dos nombres simples y múltiples de columna como argumento:

Client.pluck(:id, :name) 
# SELECT clients.id, clients.name FROM clients 
# => [[1, 'David'], [2, 'Jeremy'], [3, 'Jose']] 
2

La diferencia básica y principal es que Pluck se aplica en el nivel de dB y recoger obtener todos los datos y luego regresar registre cuando necesite todos los registros use collect y cuando pocos campos usen desplume

Cuestiones relacionadas