diff options
author | Jeremy Kemper <jeremy@bitsweat.net> | 2012-05-15 10:21:38 -0700 |
---|---|---|
committer | Jeremy Kemper <jeremy@bitsweat.net> | 2012-05-15 10:29:09 -0700 |
commit | 3f352d040575c9a08d13e10fd6191fbf2fa674ba (patch) | |
tree | f67c2795e0053a121255e9340f13364044990371 /activerecord | |
parent | 9b4f5041d29f7e558f3286d40e5dc9edbe96cfb6 (diff) | |
download | rails-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.rb | 3 | ||||
-rw-r--r-- | activerecord/test/cases/calculations_test.rb | 8 |
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 |