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