aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/associations/preloader
diff options
context:
space:
mode:
authorEugene Kenny <elkenny@gmail.com>2018-03-24 22:18:05 +0000
committerEugene Kenny <elkenny@gmail.com>2018-03-24 22:18:05 +0000
commit0cdeda5826fc7cf26de404dcdd6d747531a32b6c (patch)
treee0f7b0ed61048c76a9e216177f43b50290cbe678 /activerecord/lib/active_record/associations/preloader
parentff6d498704cff88b823871d20c5dfcaa3345ead7 (diff)
downloadrails-0cdeda5826fc7cf26de404dcdd6d747531a32b6c.tar.gz
rails-0cdeda5826fc7cf26de404dcdd6d747531a32b6c.tar.bz2
rails-0cdeda5826fc7cf26de404dcdd6d747531a32b6c.zip
Don't unset foreign key when preloading missing record
When a belongs to association's target is set, its foreign key is now updated to match the new target. This is the correct behaviour when a new record is assigned, but not when the existing record is preloaded. As long as we mark the association as loaded, we can skip setting the target when the record is missing and avoid clobbering the foreign key.
Diffstat (limited to 'activerecord/lib/active_record/associations/preloader')
-rw-r--r--activerecord/lib/active_record/associations/preloader/association.rb4
1 files changed, 2 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/associations/preloader/association.rb b/activerecord/lib/active_record/associations/preloader/association.rb
index 0f38d6bbda..d6f7359055 100644
--- a/activerecord/lib/active_record/associations/preloader/association.rb
+++ b/activerecord/lib/active_record/associations/preloader/association.rb
@@ -42,11 +42,11 @@ module ActiveRecord
def associate_records_to_owner(owner, records)
association = owner.association(reflection.name)
+ association.loaded!
if reflection.collection?
- association.loaded!
association.target.concat(records)
else
- association.target = records.first
+ association.target = records.first unless records.empty?
end
end