File tree Expand file tree Collapse file tree 1 file changed +14
-5
lines changed
activerecord/lib/active_record/associations Expand file tree Collapse file tree 1 file changed +14
-5
lines changed Original file line number Diff line number Diff line change @@ -124,12 +124,21 @@ def require_counter_update?
124
124
end
125
125
126
126
def replace_keys ( record , force : false )
127
- target_key_values = record ? Array ( primary_key ( record . class ) ) . map { |key | record . _read_attribute ( key ) } : [ ]
128
- reflection_fk = Array ( reflection . foreign_key )
127
+ reflection_fk = reflection . foreign_key
128
+ if reflection_fk . is_a? ( Array )
129
+ target_key_values = record ? Array ( primary_key ( record . class ) ) . map { |key | record . _read_attribute ( key ) } : [ ]
130
+ reflection_fk = Array ( reflection . foreign_key )
131
+
132
+ if force || reflection_fk . map { |fk | owner . _read_attribute ( fk ) } != target_key_values
133
+ reflection_fk . each_with_index do |key , index |
134
+ owner [ key ] = target_key_values [ index ]
135
+ end
136
+ end
137
+ else
138
+ target_key_value = record ? record . _read_attribute ( primary_key ( record . class ) ) : nil
129
139
130
- if force || reflection_fk . map { |fk | owner . _read_attribute ( fk ) } != target_key_values
131
- reflection_fk . zip ( target_key_values ) . each do |key , value |
132
- owner [ key ] = value
140
+ if force || owner . _read_attribute ( reflection_fk ) != target_key_value
141
+ owner [ reflection_fk ] = target_key_value
133
142
end
134
143
end
135
144
end
You can’t perform that action at this time.
0 commit comments