diff options
author | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2014-06-06 18:38:16 -0300 |
---|---|---|
committer | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2014-06-06 18:38:16 -0300 |
commit | a8a6f85a1b58543b54a71728197a43a472d2eefc (patch) | |
tree | e8c48f9fddfe5e5d2c6d2a8be1462e34e7694249 /activerecord/lib/active_record | |
parent | 43697f4fe5ce60d5483afbb2ccb123c4ed467022 (diff) | |
parent | 36e9be8524ff524ac5ea51dd1fc6ee33cfe4285a (diff) | |
download | rails-a8a6f85a1b58543b54a71728197a43a472d2eefc.tar.gz rails-a8a6f85a1b58543b54a71728197a43a472d2eefc.tar.bz2 rails-a8a6f85a1b58543b54a71728197a43a472d2eefc.zip |
Merge pull request #15552 from sgrif/sg-remove-klass-special-case
Remove composed_of special case from multi-parameter attributes
Diffstat (limited to 'activerecord/lib/active_record')
-rw-r--r-- | activerecord/lib/active_record/aggregations.rb | 4 | ||||
-rw-r--r-- | activerecord/lib/active_record/attribute_assignment.rb | 7 |
2 files changed, 7 insertions, 4 deletions
diff --git a/activerecord/lib/active_record/aggregations.rb b/activerecord/lib/active_record/aggregations.rb index 45c275a017..4fead8d251 100644 --- a/activerecord/lib/active_record/aggregations.rb +++ b/activerecord/lib/active_record/aggregations.rb @@ -244,6 +244,10 @@ module ActiveRecord def writer_method(name, class_name, mapping, allow_nil, converter) define_method("#{name}=") do |part| klass = class_name.constantize + if part.is_a?(Hash) + part = klass.new(*part.values) + end + unless part.is_a?(klass) || converter.nil? || part.nil? part = converter.respond_to?(:call) ? converter.call(part) : klass.send(converter, part) end diff --git a/activerecord/lib/active_record/attribute_assignment.rb b/activerecord/lib/active_record/attribute_assignment.rb index c4cf084a04..40e2918777 100644 --- a/activerecord/lib/active_record/attribute_assignment.rb +++ b/activerecord/lib/active_record/attribute_assignment.rb @@ -126,8 +126,8 @@ module ActiveRecord def read_value return if values.values.compact.empty? - @column = object.class.reflect_on_aggregation(name.to_sym) || object.column_for_attribute(name) - klass = column.klass + @column = object.column_for_attribute(name) + klass = column ? column.klass : nil if klass == Time read_time @@ -186,8 +186,7 @@ module ActiveRecord positions = (1..max_position) validate_required_parameters!(positions) - set_values = values.values_at(*positions) - klass.new(*set_values) + values.slice(*positions) end # Checks whether some blank date parameter exists. Note that this is different |