Skip to content

Commit dae4867

Browse files
authored
Merge pull request rails#51805 from Shopify/refactor-ar-peristence-relation-methods
2 parents 135af7b + ed2c15b commit dae4867

File tree

7 files changed

+359
-354
lines changed

7 files changed

+359
-354
lines changed

activerecord/lib/active_record/association_relation.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def #{method}(attributes, **kwargs)
2222
raise ArgumentError, "Bulk insert or upsert is currently not supported for has_many through association"
2323
end
2424
25-
scoping { klass.#{method}(attributes, **kwargs) }
25+
super
2626
end
2727
RUBY
2828
end

activerecord/lib/active_record/insert_all.rb

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,16 @@ class InsertAll # :nodoc:
88
attr_reader :on_duplicate, :update_only, :returning, :unique_by, :update_sql
99

1010
class << self
11-
def execute(model, ...)
12-
model.with_connection do |c|
13-
new(model, c, ...).execute
11+
def execute(relation, ...)
12+
relation.model.with_connection do |c|
13+
new(relation, c, ...).execute
1414
end
1515
end
1616
end
1717

18-
def initialize(model, connection, inserts, on_duplicate:, update_only: nil, returning: nil, unique_by: nil, record_timestamps: nil)
19-
@model, @connection, @inserts = model, connection, inserts.map(&:stringify_keys)
18+
def initialize(relation, connection, inserts, on_duplicate:, update_only: nil, returning: nil, unique_by: nil, record_timestamps: nil)
19+
@relation = relation
20+
@model, @connection, @inserts = relation.model, connection, inserts.map(&:stringify_keys)
2021
@on_duplicate, @update_only, @returning, @unique_by = on_duplicate, update_only, returning, unique_by
2122
@record_timestamps = record_timestamps.nil? ? model.record_timestamps : record_timestamps
2223

@@ -31,10 +32,8 @@ def initialize(model, connection, inserts, on_duplicate:, update_only: nil, retu
3132
@keys = @inserts.first.keys
3233
end
3334

34-
if model.scope_attributes?
35-
@scope_attributes = model.scope_attributes
36-
@keys |= @scope_attributes.keys
37-
end
35+
@scope_attributes = relation.scope_for_create.except(@model.inheritance_column)
36+
@keys |= @scope_attributes.keys
3837
@keys = @keys.to_set
3938

4039
@returning = (connection.supports_insert_returning? ? primary_keys : false) if @returning.nil?
@@ -74,7 +73,7 @@ def update_duplicates?
7473
def map_key_with_value
7574
inserts.map do |attributes|
7675
attributes = attributes.stringify_keys
77-
attributes.merge!(scope_attributes) if scope_attributes
76+
attributes.merge!(@scope_attributes)
7877
attributes.reverse_merge!(timestamps_for_create) if record_timestamps?
7978

8079
verify_attributes(attributes)
@@ -99,8 +98,6 @@ def keys_including_timestamps
9998
end
10099

101100
private
102-
attr_reader :scope_attributes
103-
104101
def has_attribute_aliases?(attributes)
105102
attributes.keys.any? { |attribute| model.attribute_alias?(attribute) }
106103
end

0 commit comments

Comments
 (0)