diff options
author | Piotr Sarnacki <drogus@gmail.com> | 2012-05-04 00:54:04 -0700 |
---|---|---|
committer | Piotr Sarnacki <drogus@gmail.com> | 2012-05-04 23:00:41 -0700 |
commit | c5176023a0585278c533610daf1eaf6ba7d19cd8 (patch) | |
tree | 7a58fa1aa377ecbb83ef181dd9fde16a05e2f8d6 /activerecord/lib/active_record | |
parent | 2ec6ef5ddae7667e7bb37c0aa905848a9027da82 (diff) | |
download | rails-c5176023a0585278c533610daf1eaf6ba7d19cd8.tar.gz rails-c5176023a0585278c533610daf1eaf6ba7d19cd8.tar.bz2 rails-c5176023a0585278c533610daf1eaf6ba7d19cd8.zip |
Duplicate column_defaults properly (closes #6115)
Diffstat (limited to 'activerecord/lib/active_record')
-rw-r--r-- | activerecord/lib/active_record/core.rb | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/core.rb b/activerecord/lib/active_record/core.rb index eb8f4ad669..9a76c9f617 100644 --- a/activerecord/lib/active_record/core.rb +++ b/activerecord/lib/active_record/core.rb @@ -1,5 +1,6 @@ require 'active_support/concern' require 'active_support/core_ext/hash/indifferent_access' +require 'active_support/core_ext/object/duplicable' require 'thread' module ActiveRecord @@ -165,7 +166,9 @@ module ActiveRecord # # Instantiates a single new object bypassing mass-assignment security # User.new({ :first_name => 'Jamie', :is_admin => true }, :without_protection => true) def initialize(attributes = nil, options = {}) - @attributes = self.class.initialize_attributes(self.class.column_defaults.dup) + # TODO: use deep_dup after fixing it to also dup values + defaults = Hash[self.class.column_defaults.map { |k, v| [k, v.duplicable? ? v.dup : v] }] + @attributes = self.class.initialize_attributes(defaults) @columns_hash = self.class.column_types.dup init_internals |