diff options
Diffstat (limited to 'activerecord/lib')
| -rw-r--r-- | activerecord/lib/active_record/autosave_association.rb | 8 | 
1 files changed, 6 insertions, 2 deletions
| diff --git a/activerecord/lib/active_record/autosave_association.rb b/activerecord/lib/active_record/autosave_association.rb index a405f05e0b..78acc06eae 100644 --- a/activerecord/lib/active_record/autosave_association.rb +++ b/activerecord/lib/active_record/autosave_association.rb @@ -382,10 +382,14 @@ module ActiveRecord          if association = association_instance_get(reflection.name)            autosave = reflection.options[:autosave] +          # By saving the instance variable in a local variable, we make the +          # whole callback re-entrant, fixing issue #28080 +          new_record_before_save = @new_record_before_save +            # reconstruct the scope now that we know the owner's id            association.reset_scope -          if records = associated_records_to_validate_or_save(association, @new_record_before_save, autosave) +          if records = associated_records_to_validate_or_save(association, new_record_before_save, autosave)              if autosave                records_to_destroy = records.select(&:marked_for_destruction?)                records_to_destroy.each { |record| association.destroy(record) } @@ -397,7 +401,7 @@ module ActiveRecord                saved = true -              if autosave != false && (@new_record_before_save || record.new_record?) +              if autosave != false && (new_record_before_save || record.new_record?)                  if autosave                    saved = association.insert_record(record, false)                  elsif !reflection.nested? | 
