aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/associations/has_many_association.rb
diff options
context:
space:
mode:
authorRyuta Kamizono <kamipo@gmail.com>2017-04-02 08:24:23 +0900
committerRyuta Kamizono <kamipo@gmail.com>2017-04-21 07:20:52 +0900
commitc0038f7c362fa0c92fc9e1ea3bdb2706f42386c6 (patch)
tree0713cb06b1f2be74776d0b52c88ac89b2e3acbf8 /activerecord/lib/active_record/associations/has_many_association.rb
parent972df059bbedfe60d29caa8a561f5aff76883e63 (diff)
downloadrails-c0038f7c362fa0c92fc9e1ea3bdb2706f42386c6.tar.gz
rails-c0038f7c362fa0c92fc9e1ea3bdb2706f42386c6.tar.bz2
rails-c0038f7c362fa0c92fc9e1ea3bdb2706f42386c6.zip
Prevent double firing the before save callback of new object when the parent association saved in the callback
Related #18155, #26661, 268a5bb, #27434, #27442, and #28599. Originally #18155 was introduced for preventing double insertion caused by the after save callback. But it was caused the before save issue (#26661). 268a5bb fixed #26661, but it was caused the performance regression (#27434). #27442 added new record to `target` before calling callbacks for fixing #27434. But it was caused double firing before save callback (#28599). We cannot add new object to `target` before saving the object. This is improving #18155 to only track callbacks after `save`. Fixes #28599.
Diffstat (limited to 'activerecord/lib/active_record/associations/has_many_association.rb')
-rw-r--r--activerecord/lib/active_record/associations/has_many_association.rb7
1 files changed, 1 insertions, 6 deletions
diff --git a/activerecord/lib/active_record/associations/has_many_association.rb b/activerecord/lib/active_record/associations/has_many_association.rb
index b413eb3f9c..10ca0e47ff 100644
--- a/activerecord/lib/active_record/associations/has_many_association.rb
+++ b/activerecord/lib/active_record/associations/has_many_association.rb
@@ -31,12 +31,7 @@ module ActiveRecord
def insert_record(record, validate = true, raise = false)
set_owner_attributes(record)
-
- if raise
- record.save!(validate: validate)
- else
- record.save(validate: validate)
- end
+ super
end
def empty?