aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/core.rb
diff options
context:
space:
mode:
authorSean Griffin <sean@seantheprogrammer.com>2015-09-28 16:17:08 -0400
committerSean Griffin <sean@seantheprogrammer.com>2015-09-28 16:26:50 -0400
commitfb03a9ab35ed22e569ec9cef8a50ef72754b5dbe (patch)
tree6a3bd9b1b02e35f452c8158544a8748d7a6ec301 /activerecord/lib/active_record/core.rb
parente950c4b4a503d801ac141c143171dbffe758e6eb (diff)
downloadrails-fb03a9ab35ed22e569ec9cef8a50ef72754b5dbe.tar.gz
rails-fb03a9ab35ed22e569ec9cef8a50ef72754b5dbe.tar.bz2
rails-fb03a9ab35ed22e569ec9cef8a50ef72754b5dbe.zip
Separate `dup` from `deep_dup` in the attributes hash
I'm looking to move towards a tree-like structure for dirty checking that involves an attribute holding onto the attribute that it was created from. This means that `changed?` can be fully encapsulated on that object. Since the objects are immutable, in `changes_applied`, we can simply perform a shallow dup, instead of a deep one. I'm not sure if that will actually end up in a performance boost, but I'd like to semantically separate these concepts regardless
Diffstat (limited to 'activerecord/lib/active_record/core.rb')
-rw-r--r--activerecord/lib/active_record/core.rb4
1 files changed, 2 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/core.rb b/activerecord/lib/active_record/core.rb
index ffce2173ec..894d18b79e 100644
--- a/activerecord/lib/active_record/core.rb
+++ b/activerecord/lib/active_record/core.rb
@@ -296,7 +296,7 @@ module ActiveRecord
# # Instantiates a single new object
# User.new(first_name: 'Jamie')
def initialize(attributes = nil)
- @attributes = self.class._default_attributes.dup
+ @attributes = self.class._default_attributes.deep_dup
self.class.define_attribute_methods
init_internals
@@ -366,7 +366,7 @@ module ActiveRecord
##
def initialize_dup(other) # :nodoc:
- @attributes = @attributes.dup
+ @attributes = @attributes.deep_dup
@attributes.reset(self.class.primary_key)
_run_initialize_callbacks