diff options
author | Sean Griffin <sean@thoughtbot.com> | 2015-01-26 10:50:46 -0700 |
---|---|---|
committer | Sean Griffin <sean@thoughtbot.com> | 2015-01-26 11:36:13 -0700 |
commit | 025187d9806ddfbdded15d0c7bd8341665ee40e9 (patch) | |
tree | 7af2aaa3c7e5f103e6237593b006ff3e396925c9 /activerecord/lib | |
parent | 71003d63b6e217625450b0942a7afb8d7d1d14d9 (diff) | |
download | rails-025187d9806ddfbdded15d0c7bd8341665ee40e9.tar.gz rails-025187d9806ddfbdded15d0c7bd8341665ee40e9.tar.bz2 rails-025187d9806ddfbdded15d0c7bd8341665ee40e9.zip |
Move flattening records added to an association farther out
There are many ways that things end up getting passed to `concat`. Not
all of those entry points called `flatten` on their input. It seems that
just about every method that is meant to take a single record, or that
splats its input, is meant to also take an array. `concat` is the
earliest point that is common to all of the methods which add records to
the association. Partially fixes #18689
Diffstat (limited to 'activerecord/lib')
-rw-r--r-- | activerecord/lib/active_record/associations/collection_association.rb | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/associations/collection_association.rb b/activerecord/lib/active_record/associations/collection_association.rb index f2c96e9a2a..4b7591e15c 100644 --- a/activerecord/lib/active_record/associations/collection_association.rb +++ b/activerecord/lib/active_record/associations/collection_association.rb @@ -151,6 +151,7 @@ module ActiveRecord # be chained. Since << flattens its argument list and inserts each record, # +push+ and +concat+ behave identically. def concat(*records) + records = records.flatten if owner.new_record? load_target concat_records(records) @@ -549,7 +550,7 @@ module ActiveRecord def concat_records(records, should_raise = false) result = true - records.flatten.each do |record| + records.each do |record| raise_on_type_mismatch!(record) add_to_target(record) do |rec| result &&= insert_record(rec, true, should_raise) unless owner.new_record? |