aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2013-03-24 15:42:50 -0700
committerJeremy Kemper <jeremy@bitsweat.net>2013-03-24 15:42:50 -0700
commit558f3204463eea80dc32b6748fe8b4174ec7ff14 (patch)
treeb5090a491d4aeb062a0828d8b60567754fcc7bad /activerecord/lib/active_record
parent822dd1340d5f794d7b8f94733f6693125f282e8d (diff)
parenta240e526a8b4c5948a1c2a8ec49b6e2d1ad6ad23 (diff)
downloadrails-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/active_record')
-rw-r--r--activerecord/lib/active_record/core.rb14
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