diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2014-02-25 14:57:06 -0800 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2014-02-25 14:57:49 -0800 |
commit | b1656fa6305a5c8237027ab8165d7292751c0e86 (patch) | |
tree | 936a345805dfacbf2c701f0e4d4379d2819bc695 /activerecord/lib | |
parent | 7c2ce0403badb73da517002f980bac30c540ade4 (diff) | |
download | rails-b1656fa6305a5c8237027ab8165d7292751c0e86.tar.gz rails-b1656fa6305a5c8237027ab8165d7292751c0e86.tar.bz2 rails-b1656fa6305a5c8237027ab8165d7292751c0e86.zip |
let `insert_record` actuall save the object.
`before_add` callbacks are fired before the record is saved on
`has_and_belongs_to_many` assocations *and* on `has_many :through`
associations. Before this change, `before_add` callbacks would be fired
before the record was saved on `has_and_belongs_to_many` associations, but
*not* on `has_many :through` associations.
Fixes #14144
Diffstat (limited to 'activerecord/lib')
-rw-r--r-- | activerecord/lib/active_record/associations/collection_association.rb | 4 | ||||
-rw-r--r-- | activerecord/lib/active_record/associations/has_many_through_association.rb | 3 |
2 files changed, 3 insertions, 4 deletions
diff --git a/activerecord/lib/active_record/associations/collection_association.rb b/activerecord/lib/active_record/associations/collection_association.rb index 89b7945c78..270871c866 100644 --- a/activerecord/lib/active_record/associations/collection_association.rb +++ b/activerecord/lib/active_record/associations/collection_association.rb @@ -513,13 +513,13 @@ module ActiveRecord target end - def concat_records(records) + def concat_records(records, should_raise = false) result = true records.flatten.each do |record| raise_on_type_mismatch!(record) add_to_target(record) do |rec| - result &&= insert_record(rec) unless owner.new_record? + result &&= insert_record(rec, true, should_raise) unless owner.new_record? end end diff --git a/activerecord/lib/active_record/associations/has_many_through_association.rb b/activerecord/lib/active_record/associations/has_many_through_association.rb index 31b8d27892..64bc98c642 100644 --- a/activerecord/lib/active_record/associations/has_many_through_association.rb +++ b/activerecord/lib/active_record/associations/has_many_through_association.rb @@ -30,7 +30,6 @@ module ActiveRecord unless owner.new_record? records.flatten.each do |record| raise_on_type_mismatch!(record) - record.save! if record.new_record? end end @@ -40,7 +39,7 @@ module ActiveRecord def concat_records(records) ensure_not_nested - records = super + records = super(records, true) if owner.new_record? && records records.flatten.each do |record| |