Works in two unique ways.
First: pega um bloco para que ele possa ser usado exatamente como Array#select.
Model.all.select { |m| m.field == value }
Isto irá construir um array de objetos do banco de dados para o escopo, convertendo-os em um array e iterando através deles usandoArray#select.
Segundo: Modifica a instrução SELECT para a consulta para que apenas certos campos sejam recuperados:
Model.select(:field)# =>
Embora no exemplo acima pareça que este método retorna anarray, ele realmente retorna um objeto de relação e pode ter outros querymethods anexados a ele, como os outros métodos no ActiveRecord::QueryMethods.
O argumento para o método também pode ser um array de campos.
Model.select(:field, :other_field, :and_one_more)# =>
Você também pode usar uma ou mais strings, que serão usadas inalteradas como campos SELECT.
Model.select('field AS field_one', 'other_field AS field_two')# =>
Se um alias foi especificado, ele será acessível a partir dos objetos resultantes:
Model.select('field AS field_one').first.field_one# => "value"
Acessar atributos de um objeto que não tem campos recuperados por um seleto exceptid irá lançar ActiveModel::MissingAttributeError:
Model.select(:field).first.other_field# => ActiveModel::MissingAttributeError: missing attribute: other_field