aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2012-05-15 10:21:38 -0700
committerJeremy Kemper <jeremy@bitsweat.net>2012-05-15 10:29:09 -0700
commit3f352d040575c9a08d13e10fd6191fbf2fa674ba (patch)
treef67c2795e0053a121255e9340f13364044990371 /activerecord
parent9b4f5041d29f7e558f3286d40e5dc9edbe96cfb6 (diff)
downloadrails-3f352d040575c9a08d13e10fd6191fbf2fa674ba.tar.gz
rails-3f352d040575c9a08d13e10fd6191fbf2fa674ba.tar.bz2
rails-3f352d040575c9a08d13e10fd6191fbf2fa674ba.zip
Restore support for Model.pluck('sql fragment')
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/relation/calculations.rb3
-rw-r--r--activerecord/test/cases/calculations_test.rb8
2 files changed, 10 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/relation/calculations.rb b/activerecord/lib/active_record/relation/calculations.rb
index 3ce9995031..0044c49c1d 100644
--- a/activerecord/lib/active_record/relation/calculations.rb
+++ b/activerecord/lib/active_record/relation/calculations.rb
@@ -130,7 +130,8 @@ module ActiveRecord
column = types[key]
result.map do |attributes|
- value = klass.initialize_attributes(attributes)[key]
+ raise ArgumentError, "Pluck expects to select just one attribute: #{attributes.inspect}" unless attributes.one?
+ value = klass.initialize_attributes(attributes).first[1]
if column
column.type_cast value
else
diff --git a/activerecord/test/cases/calculations_test.rb b/activerecord/test/cases/calculations_test.rb
index e096585f62..c9a70bae77 100644
--- a/activerecord/test/cases/calculations_test.rb
+++ b/activerecord/test/cases/calculations_test.rb
@@ -466,6 +466,14 @@ class CalculationsTest < ActiveRecord::TestCase
assert_equal [7], Company.joins(:contracts).pluck(:developer_id)
end
+ def test_pluck_with_selection_clause
+ assert_equal [50, 53, 55, 60], Account.pluck('DISTINCT credit_limit').sort
+ end
+
+ def test_pluck_expects_a_single_selection
+ assert_raise(ArgumentError) { Account.pluck 'id, credit_limit' }
+ end
+
def test_plucks_with_ids
assert_equal Company.all.map(&:id).sort, Company.ids.sort
end