diff options
author | Carlos Antonio da Silva <carlosantoniodasilva@gmail.com> | 2012-06-19 22:12:01 -0300 |
---|---|---|
committer | Carlos Antonio da Silva <carlosantoniodasilva@gmail.com> | 2012-06-22 09:15:43 -0300 |
commit | 6aae17e85613fe8c2816ba278f9348f168692479 (patch) | |
tree | 3591e04710a81fe3fcc0ea142bc53bed446fbb33 /activerecord/test/cases | |
parent | 2e379c1e63b3646f9aff4d7e242ca37b4a57f529 (diff) | |
download | rails-6aae17e85613fe8c2816ba278f9348f168692479.tar.gz rails-6aae17e85613fe8c2816ba278f9348f168692479.tar.bz2 rails-6aae17e85613fe8c2816ba278f9348f168692479.zip |
Refactor pluck with multiple columns
Ensure it works with mix of symbols and strings, and with a select
clause possibly containing more than one column.
Also remove support for pluck with an array of columns, in favor of
passing the list of attributes:
Model.pluck(:a, :b)
See comments: https://github.com/rails/rails/pull/6500#issuecomment-6030292
Diffstat (limited to 'activerecord/test/cases')
-rw-r--r-- | activerecord/test/cases/calculations_test.rb | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/activerecord/test/cases/calculations_test.rb b/activerecord/test/cases/calculations_test.rb index e86cf33b66..4df613488a 100644 --- a/activerecord/test/cases/calculations_test.rb +++ b/activerecord/test/cases/calculations_test.rb @@ -532,10 +532,6 @@ class CalculationsTest < ActiveRecord::TestCase assert_equal [50 + 53 + 55 + 60], Account.pluck('SUM(DISTINCT(credit_limit)) as credit_limit') end - def test_pluck_expects_a_multiple_selection_as_array - 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 @@ -551,14 +547,24 @@ class CalculationsTest < ActiveRecord::TestCase assert_equal [ [1, "The First Topic"], [2, "The Second Topic of the day"], [3, "The Third Topic of the day"], [4, "The Fourth Topic of the day"] - ], Topic.order(:id).pluck([:id, :title]) + ], Topic.order(:id).pluck(:id, :title) assert_equal [ [1, "The First Topic", "David"], [2, "The Second Topic of the day", "Mary"], [3, "The Third Topic of the day", "Carl"], [4, "The Fourth Topic of the day", "Carl"] - ], Topic.order(:id).pluck([:id, :title, :author_name]) - assert_equal [ - [1, "The First Topic"], [2, "The Second Topic of the day"], - [3, "The Third Topic of the day"], [4, "The Fourth Topic of the day"] - ], Topic.order(:id).pluck(:id, :title) + ], Topic.order(:id).pluck(:id, :title, :author_name) + end + + def test_pluck_with_multiple_columns_and_selection_clause + assert_equal [[1, 50], [2, 50], [3, 50], [4, 60], [5, 55], [6, 53]], + Account.pluck('id, credit_limit') + end + + def test_pluck_with_multiple_columns_and_includes + Company.create!(:name => "test", :contracts => [Contract.new(:developer_id => 7)]) + companies_and_developers = Company.order('companies.id').includes(:contracts).pluck(:name, :developer_id) + + assert_equal Company.count, companies_and_developers.length + assert_equal ["37signals", nil], companies_and_developers.first + assert_equal ["test", 7], companies_and_developers.last end end |