From d4a62096ec5ec53a542f25c17a2d125f93ab21a5 Mon Sep 17 00:00:00 2001
From: Ryuta Kamizono <kamipo@gmail.com>
Date: Thu, 1 Sep 2016 11:20:30 +0900
Subject: Avoid to call `set_inverse_instance` twice for `has_many` association

`create`, `create!`, and `concat` in `has_many` association hits
`set_inverse_instance` twice. It is enough to hit only once.
---
 activerecord/lib/active_record/associations/collection_association.rb | 3 ++-
 activerecord/lib/active_record/associations/has_many_association.rb   | 1 -
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/activerecord/lib/active_record/associations/collection_association.rb b/activerecord/lib/active_record/associations/collection_association.rb
index 13f77c7d4d..f0cb108136 100644
--- a/activerecord/lib/active_record/associations/collection_association.rb
+++ b/activerecord/lib/active_record/associations/collection_association.rb
@@ -307,6 +307,8 @@ module ActiveRecord
             target << record
           end
 
+          set_inverse_instance(record)
+
           yield(record) if block_given?
         rescue
           if index
@@ -319,7 +321,6 @@ module ActiveRecord
         end
 
         callback(:after_add, record) unless skip_callbacks
-        set_inverse_instance(record)
 
         record
       end
diff --git a/activerecord/lib/active_record/associations/has_many_association.rb b/activerecord/lib/active_record/associations/has_many_association.rb
index 742cd25509..482970cfea 100644
--- a/activerecord/lib/active_record/associations/has_many_association.rb
+++ b/activerecord/lib/active_record/associations/has_many_association.rb
@@ -38,7 +38,6 @@ module ActiveRecord
 
       def insert_record(record, validate = true, raise = false)
         set_owner_attributes(record)
-        set_inverse_instance(record)
 
         if raise
           record.save!(validate: validate)
-- 
cgit v1.2.3