aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/CHANGELOG.md
diff options
context:
space:
mode:
authorDaniel Fox <romaimperator@gmail.com>2014-12-23 00:19:14 -0600
committerDaniel Fox <romaimperator@gmail.com>2014-12-23 00:19:14 -0600
commit2859341c383daac74608f978d8e8fad2229042a3 (patch)
treee738d92c864195844e57878d52c419145ed078a4 /activerecord/CHANGELOG.md
parent38e9f5b1d80018cb32b918f7ddd0ec677e79dfd2 (diff)
downloadrails-2859341c383daac74608f978d8e8fad2229042a3.tar.gz
rails-2859341c383daac74608f978d8e8fad2229042a3.tar.bz2
rails-2859341c383daac74608f978d8e8fad2229042a3.zip
Fixing numeric attrs when set to same negative value
This bug occurs when an attribute of an ActiveRecord model is an ActiveRecord::Type::Integer type or a ActiveRecord::Type::Decimal type (or any other type that includes the ActiveRecord::Type::Numeric module. When the value of the attribute is negative and is set to the same negative value, it is marked as changed. Take the following example of a Person model with the integer attribute age: class Person < ActiveRecord::Base # age :integer(4) end The following will produce the error: person = Person.new(age: -1) person.age = -1 person.changes => { "age" => [-1, -1] } person.age_changed? => true The problematic line is here: module ActiveRecord module Type module Numeric ... def non_numeric_string?(value) # 'wibble'.to_i will give zero, we want to make sure # that we aren't marking int zero to string zero as # changed. value.to_s !~ /\A\d+\.?\d*\z/ end end end end The regex match doesn't accept numbers with a leading '-'.
Diffstat (limited to 'activerecord/CHANGELOG.md')
-rw-r--r--activerecord/CHANGELOG.md7
1 files changed, 7 insertions, 0 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md
index 6494c7374e..e5a4356523 100644
--- a/activerecord/CHANGELOG.md
+++ b/activerecord/CHANGELOG.md
@@ -1,3 +1,10 @@
+* Fixes bug with 'ActiveRecord::Type::Numeric' that causes negative values to
+ be marked as having changed when set to the same negative value.
+
+ Closes GH#18161
+
+ *Daniel Fox*
+
* Introduce `force: :cascade` option for `create_table`. Using this option
will recreate tables even if they have dependent objects (like foreign keys).
`db/schema.rb` now uses `force: :cascade`. This makes it possible to