instance method
pluck
Ruby on Rails 4.1.16
Since v3.2.22.5Signature
pluck(*column_names)
Use pluck as a shortcut to select one or more attributes without loading a bunch of records just to grab the attributes you want.
Person.pluck(:name)
instead of
Person.all.map(&:name)
Pluck returns an Array of attribute values type-casted to match the plucked column names, if they can be deduced. Plucking an SQL fragment returns String values by default.
Person.pluck(:id) # SELECT people.id FROM people # => [1, 2, 3] Person.pluck(:id, :name) # SELECT people.id, people.name FROM people # => [[1, 'David'], [2, 'Jeremy'], [3, 'Jose']] Person.pluck('DISTINCT role') # SELECT DISTINCT role FROM people # => ['admin', 'member', 'guest'] Person.where(age: 21).limit(5).pluck(:id) # SELECT people.id FROM people WHERE people.age = 21 LIMIT 5 # => [2, 3] Person.pluck('DATEDIFF(updated_at, created_at)') # SELECT DATEDIFF(updated_at, created_at) FROM people # => ['0', '27761', '173']
Parameters
-
column_namesrest
Source
# File activerecord/lib/active_record/relation/calculations.rb, line 156
def pluck(*column_names)
column_names.map! do |column_name|
if column_name.is_a?(Symbol) && attribute_alias?(column_name)
attribute_alias(column_name)
else
column_name.to_s
end
end
if has_include?(column_names.first)
construct_relation_for_association_calculations.pluck(*column_names)
else
relation = spawn
relation.select_values = column_names.map { |cn|
columns_hash.key?(cn) ? arel_table[cn] : cn
}
result = klass.connection.select_all(relation.arel, nil, bind_values)
columns = result.columns.map do |key|
klass.column_types.fetch(key) {
result.column_types.fetch(key) { result.identity_type }
}
end
result = result.rows.map do |values|
values = result.columns.zip(values).map do |column_name, value|
single_attr_hash = { column_name => value }
klass.initialize_attributes(single_attr_hash).values.first
end
columns.zip(values).map { |column, value| column.type_cast value }
end
columns.one? ? result.map!(&:first) : result
end
end
Defined in activerecord/lib/active_record/relation/calculations.rb line 156
· View on GitHub
· Improve this page
· Find usages on GitHub
Defined in ActiveRecord::Calculations