2012-08-29 5 views

risposta

179

pluck è al livello db. Interrogherà solo il campo particolare. See this.

Quando si esegue:

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

sono presenti oggetti con tutti i campi caricati e si ottiene semplicemente i id grazie al metodo basato sulla Enumerable.

Quindi:

  • se solo bisogno della id con Rails 4, utilizzare ids: User.first.gifts.ids

  • se solo bisogno di alcuni campi con Rails 4, utilizzare pluck: User.first.gifts.pluck(:id, :name, ...)

  • se si solo bisogno di un campo con Rails 3, utilizzare pluck: User.first.gifts.pluck(:id)

  • se avete bisogno di tutti campi, utilizzare collect

  • se avete bisogno di alcuni campi con Rails 4, ancora usare pluck

  • se hai bisogno di alcuni campi con Rails 3, usa select e collect

+0

Impressionante. Molte grazie. –

+0

Dovevo accettare la risposta allo stesso tempo.Stackoverflow mi ha dato errore: puoi accettare la risposta dopo 9 minuti :) –

+0

Capisco, nessun problema, solo un promemoria;) – apneadiving

20

Sì. According to Rails guides, pluck converte direttamente un risultato del database in un array, senza creare oggetti ActiveRecord. Ciò significa prestazioni migliori per una query di grandi dimensioni o frequente.

Oltre a @ di apneadiving risposta, pluck può prendere entrambi i nomi delle colonne singole e multiple come argomento:

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

La differenza fondamentale e principale è che Pluck si applica a livello db e raccogliere ottenere tutti i dati e poi di ritorno registrare per voi quando avete bisogno di raccogliere tutti i record e quando pochi campi quindi utilizzare pizzica