aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record
diff options
context:
space:
mode:
authorNeeraj Singh <neerajdotname@gmail.com>2013-05-11 00:34:25 -0400
committerNeeraj Singh <neerajdotname@gmail.com>2013-06-21 23:35:12 +0530
commit82882d4162c534e9aeef629cbbd7b5f84f45ee12 (patch)
treedfd8289327ad2cbd307a7366f2f4965d5b221fdd /activerecord/lib/active_record
parentcbc2e7987e71ff34149acaf1f9f3205f30b67174 (diff)
downloadrails-82882d4162c534e9aeef629cbbd7b5f84f45ee12.tar.gz
rails-82882d4162c534e9aeef629cbbd7b5f84f45ee12.tar.bz2
rails-82882d4162c534e9aeef629cbbd7b5f84f45ee12.zip
do not load all child records for inverse case
currently `post.comments.find(Comment.first.id)` would load all comments for the given post to set the inverse association. This has a huge performance penalty. Because if post has 100k records and all these 100k records would be loaded in memory even though the comment id was supplied. Fix is to use in-memory records only if loaded? is true. Otherwise load the records using full sql. Fixes #10509
Diffstat (limited to 'activerecord/lib/active_record')
-rw-r--r--activerecord/lib/active_record/associations/collection_association.rb2
1 files changed, 1 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/associations/collection_association.rb b/activerecord/lib/active_record/associations/collection_association.rb
index efd7ecb97c..9833822f8f 100644
--- a/activerecord/lib/active_record/associations/collection_association.rb
+++ b/activerecord/lib/active_record/associations/collection_association.rb
@@ -81,7 +81,7 @@ module ActiveRecord
else
if options[:finder_sql]
find_by_scan(*args)
- elsif options[:inverse_of]
+ elsif options[:inverse_of] && loaded?
args = args.flatten
raise RecordNotFound, "Couldn't find #{scope.klass.name} without an ID" if args.blank?