diff options
author | Lachlan Sylvester <lachlan.sylvester@hypothetical.com.au> | 2019-06-21 15:34:45 +1000 |
---|---|---|
committer | Kasper Timm Hansen <kaspth@gmail.com> | 2019-08-05 02:39:52 +0200 |
commit | 1af44e4aeeb04a6360b5104d8ee7b4a042ef93d8 (patch) | |
tree | 289ff122e1fd2b6531b065c77fb8cf7b4e0e5dd0 /activerecord/lib | |
parent | 6c6d852854ad068acf7d610808ed501b7d13c7f6 (diff) | |
download | rails-1af44e4aeeb04a6360b5104d8ee7b4a042ef93d8.tar.gz rails-1af44e4aeeb04a6360b5104d8ee7b4a042ef93d8.tar.bz2 rails-1af44e4aeeb04a6360b5104d8ee7b4a042ef93d8.zip |
handle passing in primary key to unique_by, and handle primary keys missing indexes
Diffstat (limited to 'activerecord/lib')
-rw-r--r-- | activerecord/lib/active_record/insert_all.rb | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/insert_all.rb b/activerecord/lib/active_record/insert_all.rb index f6577dcbc4..3863b6bfea 100644 --- a/activerecord/lib/active_record/insert_all.rb +++ b/activerecord/lib/active_record/insert_all.rb @@ -14,7 +14,7 @@ module ActiveRecord @returning = (connection.supports_insert_returning? ? primary_keys : false) if @returning.nil? @returning = false if @returning == [] - @unique_by = find_unique_index_for(unique_by) if unique_by + @unique_by = find_unique_index_for(unique_by || model.primary_key) @on_duplicate = :skip if @on_duplicate == :update && updatable_columns.empty? ensure_valid_options_for_connection! @@ -32,7 +32,7 @@ module ActiveRecord end def primary_keys - Array(model.primary_key) + Array(connection.schema_cache.primary_keys(model.table_name)) end @@ -61,6 +61,8 @@ module ActiveRecord if index = unique_indexes.find { |i| match.include?(i.name) || i.columns == match } index + elsif match == primary_keys + nil else raise ArgumentError, "No unique index found for #{unique_by}" end |