diff options
author | Alexey Vakhov <vakhov@gmail.com> | 2012-03-09 15:18:16 +0400 |
---|---|---|
committer | Alexey Vakhov <vakhov@gmail.com> | 2012-03-09 15:21:12 +0400 |
commit | 48a7df9a9f039ecb6466d51c651e4bc624077cf4 (patch) | |
tree | cd72178f71a630467af8bb8fbb4315649dcc963a | |
parent | 225eff9d61d2bcea5cbe8c30a03f404fab239f18 (diff) | |
download | rails-48a7df9a9f039ecb6466d51c651e4bc624077cf4.tar.gz rails-48a7df9a9f039ecb6466d51c651e4bc624077cf4.tar.bz2 rails-48a7df9a9f039ecb6466d51c651e4bc624077cf4.zip |
In AR depths use &:to_i before :uniq to process mixed arrays likes ["1", 1] correct
-rw-r--r-- | activerecord/lib/active_record/associations/collection_association.rb | 2 | ||||
-rw-r--r-- | activerecord/test/cases/associations/has_many_associations_test.rb | 7 |
2 files changed, 8 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/associations/collection_association.rb b/activerecord/lib/active_record/associations/collection_association.rb index b2136605e1..da4c311bce 100644 --- a/activerecord/lib/active_record/associations/collection_association.rb +++ b/activerecord/lib/active_record/associations/collection_association.rb @@ -544,7 +544,7 @@ module ActiveRecord # If using a custom finder_sql, #find scans the entire collection. def find_by_scan(*args) expects_array = args.first.kind_of?(Array) - ids = args.flatten.compact.uniq.map { |arg| arg.to_i } + ids = args.flatten.compact.map{ |arg| arg.to_i }.uniq if ids.size == 1 id = ids.first diff --git a/activerecord/test/cases/associations/has_many_associations_test.rb b/activerecord/test/cases/associations/has_many_associations_test.rb index 02a7f6af78..6a4f972356 100644 --- a/activerecord/test/cases/associations/has_many_associations_test.rb +++ b/activerecord/test/cases/associations/has_many_associations_test.rb @@ -378,6 +378,13 @@ class HasManyAssociationsTest < ActiveRecord::TestCase assert_equal 1, Firm.find(:first, :order => "id").clients_using_sql.size end + def test_finding_using_sql_take_into_account_only_uniq_ids + firm = Firm.find(:first, :order => "id") + client = firm.clients_using_sql.first + assert_equal client, firm.clients_using_sql.find(client.id, client.id) + assert_equal client, firm.clients_using_sql.find(client.id, client.id.to_s) + end + def test_counting_using_sql assert_equal 1, Firm.find(:first, :order => "id").clients_using_counter_sql.size assert Firm.find(:first, :order => "id").clients_using_counter_sql.any? |