diff options
author | Matthew Draper <matthew@trebex.net> | 2017-05-26 09:02:48 +0930 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-26 09:02:48 +0930 |
commit | 289cd3755a3483f5f6de3b6d9b509e513cb14c5a (patch) | |
tree | 321b0963991b5663b98dda3d558c539f5c948f73 /activerecord/lib/active_record | |
parent | e8391bab928bda5ec4555e2ddb61e9092c2203c0 (diff) | |
parent | fb6ccce80663dad034d86c472024076a8348a12f (diff) | |
download | rails-289cd3755a3483f5f6de3b6d9b509e513cb14c5a.tar.gz rails-289cd3755a3483f5f6de3b6d9b509e513cb14c5a.tar.bz2 rails-289cd3755a3483f5f6de3b6d9b509e513cb14c5a.zip |
Merge pull request #29215 from voxmedia/ar_optimizations
ActiveRecord initialization optimizations
Diffstat (limited to 'activerecord/lib/active_record')
-rw-r--r-- | activerecord/lib/active_record/attribute_set.rb | 2 | ||||
-rw-r--r-- | activerecord/lib/active_record/inheritance.rb | 2 | ||||
-rw-r--r-- | activerecord/lib/active_record/model_schema.rb | 3 |
3 files changed, 4 insertions, 3 deletions
diff --git a/activerecord/lib/active_record/attribute_set.rb b/activerecord/lib/active_record/attribute_set.rb index 66b278219a..01f9d815d5 100644 --- a/activerecord/lib/active_record/attribute_set.rb +++ b/activerecord/lib/active_record/attribute_set.rb @@ -64,7 +64,7 @@ module ActiveRecord end def deep_dup - dup.tap do |copy| + self.class.allocate.tap do |copy| copy.instance_variable_set(:@attributes, attributes.deep_dup) end end diff --git a/activerecord/lib/active_record/inheritance.rb b/activerecord/lib/active_record/inheritance.rb index fbdaeaae51..236a65eba7 100644 --- a/activerecord/lib/active_record/inheritance.rb +++ b/activerecord/lib/active_record/inheritance.rb @@ -217,7 +217,7 @@ module ActiveRecord def subclass_from_attributes(attrs) attrs = attrs.to_h if attrs.respond_to?(:permitted?) if attrs.is_a?(Hash) - subclass_name = attrs.with_indifferent_access[inheritance_column] + subclass_name = attrs[inheritance_column] || attrs[inheritance_column.to_sym] if subclass_name.present? find_sti_class(subclass_name) diff --git a/activerecord/lib/active_record/model_schema.rb b/activerecord/lib/active_record/model_schema.rb index 5095cdfe9f..013562708c 100644 --- a/activerecord/lib/active_record/model_schema.rb +++ b/activerecord/lib/active_record/model_schema.rb @@ -381,7 +381,7 @@ module ActiveRecord # default values when instantiating the Active Record object for this table. def column_defaults load_schema - _default_attributes.to_hash + @column_defaults ||= _default_attributes.to_hash end def _default_attributes # :nodoc: @@ -484,6 +484,7 @@ module ActiveRecord @attribute_types = nil @content_columns = nil @default_attributes = nil + @column_defaults = nil @inheritance_column = nil unless defined?(@explicit_inheritance_column) && @explicit_inheritance_column @attributes_builder = nil @columns = nil |