aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/relation/calculations.rb
diff options
context:
space:
mode:
authorBogdan Gusiev <agresso@gmail.com>2011-11-30 11:03:00 +0200
committerBogdan Gusiev <agresso@gmail.com>2011-11-30 11:03:00 +0200
commita382d60f6abc94b6a965525872f858e48abc00de (patch)
tree969d8b7d6321f7868e2f613f6f44987f3f471911 /activerecord/lib/active_record/relation/calculations.rb
parentd9c288207731e61c40ce6276fd91f0b800d3fabb (diff)
downloadrails-a382d60f6abc94b6a965525872f858e48abc00de.tar.gz
rails-a382d60f6abc94b6a965525872f858e48abc00de.tar.bz2
rails-a382d60f6abc94b6a965525872f858e48abc00de.zip
ActiveRecord::Relation#pluck method
Diffstat (limited to 'activerecord/lib/active_record/relation/calculations.rb')
-rw-r--r--activerecord/lib/active_record/relation/calculations.rb17
1 files changed, 17 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/relation/calculations.rb b/activerecord/lib/active_record/relation/calculations.rb
index af86771d2d..0f57e9831d 100644
--- a/activerecord/lib/active_record/relation/calculations.rb
+++ b/activerecord/lib/active_record/relation/calculations.rb
@@ -166,6 +166,23 @@ module ActiveRecord
0
end
+ # This method is designed to perform select by a single column as direct SQL query
+ # Returns <tt>Array</tt> with values of the specified column name
+ # The values has same data type as column.
+ #
+ # Examples:
+ #
+ # Person.pluck(:id) # SELECT people.id FROM people
+ # Person.uniq.pluck(:role) # SELECT DISTINCT role FROM people
+ # Person.where(:confirmed => true).limit(5).pluck(:id)
+ #
+ def pluck(column_name)
+ scope = self.select(column_name)
+ self.connection.select_values(scope.to_sql).map! do |value|
+ type_cast_using_column(value, column_for(column_name))
+ end
+ end
+
private
def perform_calculation(operation, column_name, options = {})