• D
    Fixing numeric attrs when set to same negative value · 2859341c
    Daniel Fox 提交于
    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 '-'.
    2859341c
可在Tags中查看这些版本中当前仓库的状态.
CHANGELOG.md 1.8 KB