aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/cases
diff options
context:
space:
mode:
authorLann Martin <lann@causes.com>2013-09-04 16:47:28 -0700
committerLann Martin <lann@lannbox.com>2013-09-09 15:17:44 -0600
commit8875e28a50b117aa862c8563c49f7e3a6ee7deff (patch)
treefe508015d39bc6ca217976ab3d814a6517f2c926 /activerecord/test/cases
parentc27fde26166f71ec68a7fb501435b656f436a687 (diff)
downloadrails-8875e28a50b117aa862c8563c49f7e3a6ee7deff.tar.gz
rails-8875e28a50b117aa862c8563c49f7e3a6ee7deff.tar.bz2
rails-8875e28a50b117aa862c8563c49f7e3a6ee7deff.zip
Make CollectionAssociation first/last with integer fetch with query
When first or last is called with an integer on an unloaded association, the entire collection is loaded. This differs surprisingly from the behavior of Relation#first/last, which translate the call into a limit query. For large collections this can make a big difference in performance. Change CollectionAssociation#fetch_first_or_last_using_find? to make this kind of call delegate to Relation.
Diffstat (limited to 'activerecord/test/cases')
-rw-r--r--activerecord/test/cases/associations/has_many_associations_test.rb8
1 files changed, 5 insertions, 3 deletions
diff --git a/activerecord/test/cases/associations/has_many_associations_test.rb b/activerecord/test/cases/associations/has_many_associations_test.rb
index 4c0fa88917..ebeead0dc2 100644
--- a/activerecord/test/cases/associations/has_many_associations_test.rb
+++ b/activerecord/test/cases/associations/has_many_associations_test.rb
@@ -1414,15 +1414,17 @@ class HasManyAssociationsTest < ActiveRecord::TestCase
end
end
- def test_calling_first_or_last_with_integer_on_association_should_load_association
+ def test_calling_first_or_last_with_integer_on_association_should_not_load_association
firm = companies(:first_firm)
+ firm.clients.create(:name => 'Foo')
+ assert !firm.clients.loaded?
- assert_queries 1 do
+ assert_queries 2 do
firm.clients.first(2)
firm.clients.last(2)
end
- assert firm.clients.loaded?
+ assert !firm.clients.loaded?
end
def test_calling_many_should_count_instead_of_loading_association