rails/activerecord/CHANGELOG.md
Daniel Fox 2859341c38 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 '-'.
2014-12-23 00:19:14 -06:00

1.8 KiB

  • 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 reload the schema when foreign keys are in place.

    Matthew Draper, Yves Senn

  • db:schema:load and db:structure:load no longer purge the database before loading the schema. This is left for the user to do. db:test:prepare will still purge the database.

    Closes #17945.

    Yves Senn

  • Fix undesirable RangeError by Type::Integer. Add Type::UnsignedInteger.

    Ryuta Kamizono

  • Add foreign_type option to has_one and has_many association macros.

    This option enables to define the column name of associated object's type for polymorphic associations.

    Ulisses Almeida, Kassio Borges

  • Remove deprecated behavior allowing nested arrays to be passed as query values.

    Melanie Gilman

  • Deprecate passing a class as a value in a query. Users should pass strings instead.

    Melanie Gilman

  • add_timestamps and remove_timestamps now properly reversible with options.

    Noam Gagliardi-Rabinovich

  • ActiveRecord::ConnectionAdapters::ColumnDumper#column_spec and ActiveRecord::ConnectionAdapters::ColumnDumper#prepare_column_options no longer have a types argument. They should access connection#native_database_types directly.

    Yves Senn

Please check 4-2-stable for previous changes.