@@ -4,27 +4,30 @@ module ActiveRecord
4
4
module AttributeAssignment
5
5
private
6
6
def _assign_attributes ( attributes )
7
- multi_parameter_attributes = nested_parameter_attributes = nil
7
+ foreign_keys = foreign_key_column_names
8
+ foreign_key_attributes = nil
9
+ normal_attributes = { }
10
+ multi_parameter_attributes = nil
8
11
9
12
attributes . each do |k , v |
10
13
key = k . to_s
11
14
12
- if key . include? ( "(" )
15
+ if key . in? ( foreign_keys )
16
+ ( foreign_key_attributes ||= { } ) [ key ] = v
17
+ elsif key . include? ( "(" )
13
18
( multi_parameter_attributes ||= { } ) [ key ] = v
14
- elsif v . is_a? ( Hash )
15
- ( nested_parameter_attributes ||= { } ) [ key ] = v
16
19
else
17
- _assign_attribute ( key , v )
20
+ normal_attributes [ key ] = v
18
21
end
19
22
end
20
23
21
- assign_nested_parameter_attributes ( nested_parameter_attributes ) if nested_parameter_attributes
24
+ foreign_key_attributes . each { |key , value | _assign_attribute ( key , value ) } if foreign_key_attributes
25
+ normal_attributes . each { |key , value | _assign_attribute ( key , value ) }
22
26
assign_multiparameter_attributes ( multi_parameter_attributes ) if multi_parameter_attributes
23
27
end
24
28
25
- # Assign any deferred nested attributes after the base attributes have been set.
26
- def assign_nested_parameter_attributes ( pairs )
27
- pairs . each { |k , v | _assign_attribute ( k , v ) }
29
+ def foreign_key_column_names
30
+ self . class . _reflections . values . grep ( Reflection ::BelongsToReflection ) . map ( &:foreign_key )
28
31
end
29
32
30
33
# Instantiates objects for all attribute classes that needs more than one constructor parameter. This is done
0 commit comments