diff options
author | Jeremy Kemper <jeremy@bitsweat.net> | 2013-03-24 15:42:50 -0700 |
---|---|---|
committer | Jeremy Kemper <jeremy@bitsweat.net> | 2013-03-24 15:42:50 -0700 |
commit | 558f3204463eea80dc32b6748fe8b4174ec7ff14 (patch) | |
tree | b5090a491d4aeb062a0828d8b60567754fcc7bad /activerecord/lib | |
parent | 822dd1340d5f794d7b8f94733f6693125f282e8d (diff) | |
parent | a240e526a8b4c5948a1c2a8ec49b6e2d1ad6ad23 (diff) | |
download | rails-558f3204463eea80dc32b6748fe8b4174ec7ff14.tar.gz rails-558f3204463eea80dc32b6748fe8b4174ec7ff14.tar.bz2 rails-558f3204463eea80dc32b6748fe8b4174ec7ff14.zip |
Merge pull request #9489 from obrie/fix/overridden_defaults_changed_attributes
Fix ActiveRecord locking column defaults not getting persisted
Diffstat (limited to 'activerecord/lib')
-rw-r--r-- | activerecord/lib/active_record/core.rb | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/activerecord/lib/active_record/core.rb b/activerecord/lib/active_record/core.rb index 968dad5844..013f9b92b9 100644 --- a/activerecord/lib/active_record/core.rb +++ b/activerecord/lib/active_record/core.rb @@ -176,6 +176,7 @@ module ActiveRecord @columns_hash = self.class.column_types.dup init_internals + init_changed_attributes ensure_proper_type populate_with_current_scope_attributes @@ -246,9 +247,7 @@ module ActiveRecord run_callbacks(:initialize) unless _initialize_callbacks.empty? @changed_attributes = {} - self.class.column_defaults.each do |attr, orig_value| - @changed_attributes[attr] = orig_value if _field_changed?(attr, orig_value, @attributes[attr]) - end + init_changed_attributes @aggregation_cache = {} @association_cache = {} @@ -434,5 +433,14 @@ module ActiveRecord @transaction_state = nil @reflects_state = [false] end + + def init_changed_attributes + # Intentionally avoid using #column_defaults since overriden defaults (as is done in + # optimistic locking) won't get written unless they get marked as changed + self.class.columns.each do |c| + attr, orig_value = c.name, c.default + @changed_attributes[attr] = orig_value if _field_changed?(attr, orig_value, @attributes[attr]) + end + end end end |