Skip to content

Instantly share code, notes, and snippets.

@bradleypriest
Forked from jcf/active_record.rb
Created March 22, 2012 20:01
Show Gist options
  • Save bradleypriest/2163001 to your computer and use it in GitHub Desktop.
Save bradleypriest/2163001 to your computer and use it in GitHub Desktop.
Backport pluck to Rails 3.0/3.1
# config/initializers/extensions/active_record.rb
module ActiveRecord
class Base
class << self
delegate :pluck, to: :scoped
end
end
class CollectionProxy
delegate :pluck, to: :scoped
end
# = Active Record Relation
class Relation
# 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)
if column_name.is_a?(Symbol) && column_names.include?(column_name.to_s)
column_name = "#{table_name}.#{column_name}"
end
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
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment