aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test
diff options
context:
space:
mode:
authorRafael Mendonça França <rafaelmfranca@gmail.com>2012-12-04 04:12:35 -0800
committerRafael Mendonça França <rafaelmfranca@gmail.com>2012-12-04 04:12:35 -0800
commita9dc44677ca0caa3660a54b191dca5229dc25f4f (patch)
treef7e3cf4d528c38145c0e547fd345d2d19823fa6c /activerecord/test
parentc7e4ee79326d81f78cfa3d958a8fce34fde83a15 (diff)
parentdb51704bd9458635ad82e6a7de56a9fd56db64d4 (diff)
downloadrails-a9dc44677ca0caa3660a54b191dca5229dc25f4f.tar.gz
rails-a9dc44677ca0caa3660a54b191dca5229dc25f4f.tar.bz2
rails-a9dc44677ca0caa3660a54b191dca5229dc25f4f.zip
Merge pull request #8403 from senny/3313_after_find_is_triggered_too_often
Do not instantiate intermediate AR objects when eager loading.
Diffstat (limited to 'activerecord/test')
-rw-r--r--activerecord/test/cases/associations/eager_test.rb6
-rw-r--r--activerecord/test/models/developer.rb10
2 files changed, 16 insertions, 0 deletions
diff --git a/activerecord/test/cases/associations/eager_test.rb b/activerecord/test/cases/associations/eager_test.rb
index 79612c8dee..94437380a4 100644
--- a/activerecord/test/cases/associations/eager_test.rb
+++ b/activerecord/test/cases/associations/eager_test.rb
@@ -944,6 +944,12 @@ class EagerAssociationTest < ActiveRecord::TestCase
assert_equal 3, Developer.all.merge!(:includes => 'projects', :where => { 'developers_projects.access_level' => 1 }, :limit => 5).to_a.size
end
+ def test_dont_create_temporary_active_record_instances
+ Developer.instance_count = 0
+ developers = Developer.all.merge!(:includes => 'projects', :where => { 'developers_projects.access_level' => 1 }, :limit => 5).to_a
+ assert_equal developers.count, Developer.instance_count
+ end
+
def test_order_on_join_table_with_include_and_limit
assert_equal 5, Developer.all.merge!(:includes => 'projects', :order => 'developers_projects.joined_on DESC', :limit => 5).to_a.size
end
diff --git a/activerecord/test/models/developer.rb b/activerecord/test/models/developer.rb
index 622dd75aeb..1c048bb6b4 100644
--- a/activerecord/test/models/developer.rb
+++ b/activerecord/test/models/developer.rb
@@ -57,6 +57,16 @@ class Developer < ActiveRecord::Base
def log=(message)
audit_logs.build :message => message
end
+
+ after_find :track_instance_count
+ cattr_accessor :instance_count
+
+ def track_instance_count
+ self.class.instance_count ||= 0
+ self.class.instance_count += 1
+ end
+ private :track_instance_count
+
end
class AuditLog < ActiveRecord::Base