aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/associations/has_one_association.rb
diff options
context:
space:
mode:
Diffstat (limited to 'activerecord/lib/active_record/associations/has_one_association.rb')
-rw-r--r--activerecord/lib/active_record/associations/has_one_association.rb9
1 files changed, 7 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/associations/has_one_association.rb b/activerecord/lib/active_record/associations/has_one_association.rb
index 30704b6f7e..e566089013 100644
--- a/activerecord/lib/active_record/associations/has_one_association.rb
+++ b/activerecord/lib/active_record/associations/has_one_association.rb
@@ -10,8 +10,13 @@ module ActiveRecord
def replace(obj, dont_save = false)
load_target
unless @target.nil?
- @target[@association_class_primary_key_name] = nil
- @target.save unless @owner.new_record?
+ if dependent? && !dont_save
+ @target.destroy unless @target.new_record?
+ @owner.clear_association_cache
+ else
+ @target[@association_class_primary_key_name] = nil
+ @target.save unless @owner.new_record?
+ end
end
if obj.nil?