Funziona in due modi unici.
Primo: prende un blocco in modo da poter essere usato proprio come Array#select.
Model.all.select { |m| m.field == value }
Costruisce un array di oggetti dal database per l’ambito, convertendoli in un array e iterando attraverso di essi usandoArray#select.
Secondo: modifica l’istruzione SELECT per la query in modo da recuperare solo certi campi:
Model.select(:field)# =>
Anche se nell’esempio precedente sembra che questo metodo restituisca un array, in realtà restituisce un oggetto relazione e può avere altri metodi di query aggiunti ad esso, come gli altri metodi in ActiveRecord::QueryMethods.
L’argomento del metodo può anche essere un array di campi.
Model.select(:field, :other_field, :and_one_more)# =>
Potete anche usare una o più stringhe, che saranno usate invariate come campi SELECT.
Model.select('field AS field_one', 'other_field AS field_two')# =>
Se è stato specificato un alias, esso sarà accessibile dagli oggetti risultanti:
Model.select('field AS field_one').first.field_one# => "value"
L’accesso agli attributi di un oggetto che non hanno campi recuperati da una select exceptid lancia ActiveModel::MissingAttributeError:
Model.select(:field).first.other_field# => ActiveModel::MissingAttributeError: missing attribute: other_field