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 '-'.
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 forcreate_table
. Using this option will recreate tables even if they have dependent objects (like foreign keys).db/schema.rb
now usesforce: :cascade
. This makes it possible to reload the schema when foreign keys are in place.Matthew Draper, Yves Senn
-
db:schema:load
anddb: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 tohas_one
andhas_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
andremove_timestamps
now properly reversible with options.Noam Gagliardi-Rabinovich
-
ActiveRecord::ConnectionAdapters::ColumnDumper#column_spec
andActiveRecord::ConnectionAdapters::ColumnDumper#prepare_column_options
no longer have atypes
argument. They should accessconnection#native_database_types
directly.Yves Senn
Please check 4-2-stable for previous changes.