CHANGELOG.md 51.7 KB
Newer Older
1 2 3 4 5 6
*   Fixed `where` for polymorphic associations when passed an array containing different types.

    Fixes #17011.

    Example:

7 8 9 10
        PriceEstimate.where(estimate_of: [Treasure.find(1), Car.find(2)])
        => SELECT "price_estimates".* FROM "price_estimates"
           WHERE (("price_estimates"."estimate_of_type" = 'Treasure' AND "price_estimates"."estimate_of_id" = 1)
           OR ("price_estimates"."estimate_of_type" = 'Car' AND "price_estimates"."estimate_of_id" = 2))
11 12 13

    *Philippe Huibonhoa*
    
14 15 16 17 18
*   Fix a bug where using `t.foreign_key` twice with the same `to_table` within
    the same table definition would only create one foreign key.

    *George Millo*

19 20 21
*   Fix a regression on has many association, where calling a child from parent in child's callback
    results in same child records getting added repeatedly to target.

22
    Fixes #13387.
23

24
    *Bogdan Gusiev*, *Jon Hinson*
25 26 27

*   Rework `ActiveRecord::Relation#last`

28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
    1. Never perform additional SQL on loaded relation
    2. Use SQL reverse order instead of loading relation if relation doesn't have limit
    3. Deprecated relation loading when SQL order can not be automatically reversed

        Topic.order("title").load.last(3)
          # before: SELECT ...
          # after: No SQL

        Topic.order("title").last
          # before: SELECT * FROM `topics`
          # after:  SELECT * FROM `topics` ORDER BY `topics`.`title` DESC LIMIT 1

        Topic.order("coalesce(author, title)").last
          # before: SELECT * FROM `topics`
          # after:  Deprecation Warning for irreversible order

    *Bogdan Gusiev*


T
Takashi Kokubun 已提交
47 48 49 50
*   Allow `joins` to be unscoped.

    Closes #13775.

51 52
    *Takashi Kokubun*

53 54 55 56
*   Add ActiveRecord `#second_to_last` and `#third_to_last` methods.

    *Brian Christian*

57 58 59 60 61 62 63 64 65 66
*   Added `numeric` helper into migrations.

    Example:

        create_table(:numeric_types) do |t|
          t.numeric :numeric_type, precision: 10, scale: 2
        end

    *Mehmet Emin İNAÇ*

67 68 69 70 71 72
*   Bumped the minimum supported version of PostgreSQL to >= 9.1.
    Both PG 9.0 and 8.4 are past their end of life date:
    http://www.postgresql.org/support/versioning/

    *Remo Mueller*

S
Sean Griffin 已提交
73 74
## Rails 5.0.0.beta2 (February 01, 2016) ##

75 76 77 78 79 80 81 82 83 84 85 86 87 88
*   `ActiveRecord::Relation#reverse_order` throws `ActiveRecord::IrreversibleOrderError`
    when the order can not be reversed using current trivial algorithm.
    Also raises the same error when `#reverse_order` is called on
    relation without any order and table has no primary key:

        Topic.order("concat(author_name, title)").reverse_order
          # Before: SELECT `topics`.* FROM `topics` ORDER BY concat(author_name DESC, title) DESC
          # After: raises ActiveRecord::IrreversibleOrderError
        Edge.all.reverse_order
          # Before: SELECT `edges`.* FROM `edges` ORDER BY `edges`.`` DESC
          # After: raises ActiveRecord::IrreversibleOrderError

    *Bogdan Gusiev*

89 90 91 92 93
*   Improve schema_migrations insertion performance by inserting all versions
    in one INSERT SQL.

    *Akira Matsuda*, *Naoto Koshikawa*

94 95 96 97 98 99 100 101 102
*   Using `references` or `belongs_to` in migrations will always add index
    for the referenced column by default, without adding `index: true` option
    to generated migration file. Users can opt out of this by passing
    `index: false`.

    Fixes #18146.

    *Matthew Draper*, *Prathamesh Sonpatki*

103 104 105 106 107 108 109 110
*   Run `type` attributes through attributes API type-casting before
    instantiating the corresponding subclass. This makes it possible to define
    custom STI mappings.

    Fixes #21986.

    *Yves Senn*

111 112 113 114 115
*   Don't try to quote functions or expressions passed to `:default` option if
    they are passed as procs.

    This will generate proper query with the passed function or expression for
    the default option, instead of trying to quote it in incorrect fashion.
116 117 118 119 120 121 122 123 124

    Example:

        create_table :posts do |t|
          t.datetime :published_at, default: -> { 'NOW()' }
        end

    *Ryuta Kamizono*

125 126
*   Fix regression when loading fixture files with symbol keys.

127
    Fixes #22584.
128 129 130

    *Yves Senn*

131
*   Use `version` column as primary key for schema_migrations table because
132
    `schema_migrations` versions are guaranteed to be unique.
133 134 135 136 137 138

    This makes it possible to use `update_attributes` on models that do
    not have a primary key.

    *Richard Schneeman*

139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
*   Add short-hand methods for text and blob types in MySQL.

    In Pg and Sqlite3, `:text` and `:binary` have variable unlimited length.
    But in MySQL, these have limited length for each types (ref #21591, #21619).
    This change adds short-hand methods for each text and blob types.

    Example:

        create_table :foos do |t|
          t.tinyblob   :tiny_blob
          t.mediumblob :medium_blob
          t.longblob   :long_blob
          t.tinytext   :tiny_text
          t.mediumtext :medium_text
          t.longtext   :long_text
        end

    *Ryuta Kamizono*

158 159 160 161 162
*   Take into account UTC offset when assigning string representation of
    timestamp with offset specified to attribute of time type.

    *Andrey Novikov*

163 164 165 166 167
*   When calling `first` with a `limit` argument, return directly from the
    `loaded?` records if available.

    *Ben Woosley*

168 169 170 171 172
*   Deprecate sending the `offset` argument to `find_nth`. Please use the
    `offset` method on relation instead.

    *Ben Woosley*

173 174
## Rails 5.0.0.beta1 (December 18, 2015) ##

175 176 177 178 179 180 181
*   Order the result of `find(ids)` to match the passed array, if the relation
    has no explicit order defined.

    Fixes #20338.

    *Miguel Grazziotin*, *Matthew Draper*

182 183 184 185 186
*   Omit default limit values in dumped schema. It's tidier, and if the defaults
    change in the future, we can address that via Migration API Versioning.

    *Jean Boussier*

187 188 189 190 191 192 193
*   Support passing the schema name as a prefix to table name in
    `ConnectionAdapters::SchemaStatements#indexes`. Previously the prefix would
    be considered a full part of the index name, and only the schema in the
    current search path would be considered.

    *Grey Baker*

194 195 196 197 198
*   Ignore index name in `index_exists?` and `remove_index` when not passed a
    name to check for.

    *Grey Baker*

199 200 201 202 203
*   Extract support for the legacy `mysql` database adapter from core. It will
    live on in a separate gem for now, but most users should just use `mysql2`.

    *Abdelkader Boudih*

204 205 206 207
*   ApplicationRecord is a new superclass for all app models, analogous to app
    controllers subclassing ApplicationController instead of
    ActionController::Base. This gives apps a single spot to configure app-wide
    model behavior.
208 209

    Newly generated applications have `app/models/application_record.rb`
210
    present by default.
211 212 213

    *Genadi Samokovarov*

214 215 216 217
*   Version the API presented to migration classes, so we can change parameter
    defaults without breaking existing migrations, or forcing them to be
    rewritten through a deprecation cycle.

218 219 220 221 222 223 224 225
    New migrations specify the Rails version they were written for:

        class AddStatusToOrders < ActiveRecord::Migration[5.0]
          def change
            # ...
          end
        end

226 227
    *Matthew Draper*, *Ravil Bayramgalin*

228 229 230 231 232
*   Use bind params for `limit` and `offset`. This will generate significantly
    fewer prepared statements for common tasks like pagination. To support this
    change, passing a string containing a comma to `limit` has been deprecated,
    and passing an Arel node to `limit` is no longer supported.

233
    Fixes #22250.
234 235 236

    *Sean Griffin*

237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254
*   Introduce after_{create,update,delete}_commit callbacks.

    Before:

        after_commit :add_to_index_later, on: :create
        after_commit :update_in_index_later, on: :update
        after_commit :remove_from_index_later, on: :destroy

    After:

        after_create_commit  :add_to_index_later
        after_update_commit  :update_in_index_later
        after_destroy_commit :remove_from_index_later

    Fixes #22515.

    *Genadi Samokovarov*

255 256 257 258
*   Respect the column default values for `inheritance_column` when
    instantiating records through the base class.

    Fixes #17121.
259 260 261

    Example:

262
        # The schema of BaseModel has `t.string :type, default: 'SubType'`
263 264 265 266 267
        subtype = BaseModel.new
        assert_equals SubType, subtype.class

    *Kuldeep Aggarwal*

268 269
*   Fix `rake db:structure:dump` on Postgres when multiple schemas are used.

270
    Fixes #22346.
271

272 273
    *Nick Muerdter*, *ckoenig*

274 275 276 277
*   Add schema dumping support for PostgreSQL geometric data types.

    *Ryuta Kamizono*

278 279
*   Except keys of `build_record`'s argument from `create_scope` in `initialize_attributes`.

280
    Fixes #21893.
281 282 283

    *Yuichiro Kaneko*

284 285 286 287 288 289 290 291 292 293 294 295 296 297
*   Deprecate `connection.tables` on the SQLite3 and MySQL adapters.
    Also deprecate passing arguments to `#tables`.
    And deprecate `table_exists?`.

    The `#tables` method of some adapters (mysql, mysql2, sqlite3) would return
    both tables and views while others (postgresql) just return tables. To make
    their behavior consistent, `#tables` will return only tables in the future.

    The `#table_exists?` method would check both tables and views. To make
    their behavior consistent with `#tables`, `#table_exists?` will check only
    tables in the future.

    *Yuichiro Kaneko*

298 299 300 301 302 303 304 305
*   Improve support for non Active Record objects on `validates_associated`

    Skipping `marked_for_destruction?` when the associated object does not responds
    to it make easier to validate virtual associations built on top of Active Model
    objects and/or serialized objects that implement a `valid?` instance method.

    *Kassio Borges*, *Lucas Mazza*

306 307 308 309 310
*   Change connection management middleware to return a new response with
    a body proxy, rather than mutating the original.

    *Kevin Buchanan*

311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351
*   Make `db:migrate:status` to render `1_some.rb` format migrate files.

    These files are in `db/migrate`:

        * 1_valid_people_have_last_names.rb
        * 20150819202140_irreversible_migration.rb
        * 20150823202140_add_admin_flag_to_users.rb
        * 20150823202141_migration_tests.rb
        * 2_we_need_reminders.rb
        * 3_innocent_jointable.rb

    Before:

        $ bundle exec rake db:migrate:status
        ...

         Status   Migration ID    Migration Name
        --------------------------------------------------
           up     001             ********** NO FILE **********
           up     002             ********** NO FILE **********
           up     003             ********** NO FILE **********
           up     20150819202140  Irreversible migration
           up     20150823202140  Add admin flag to users
           up     20150823202141  Migration tests

    After:

        $ bundle exec rake db:migrate:status
        ...

         Status   Migration ID    Migration Name
        --------------------------------------------------
           up     001             Valid people have last names
           up     002             We need reminders
           up     003             Innocent jointable
           up     20150819202140  Irreversible migration
           up     20150823202140  Add admin flag to users
           up     20150823202141  Migration tests

    *Yuichiro Kaneko*

352 353 354 355 356
*   Define `ActiveRecord::Sanitization.sanitize_sql_for_order` and use it inside
    `preprocess_order_args`.

    *Yuichiro Kaneko*

357 358 359 360
*   Allow bigint with default nil for avoiding auto increment primary key.

    *Ryuta Kamizono*

361 362 363 364 365 366 367
*   Remove `DEFAULT_CHARSET` and `DEFAULT_COLLATION` in `MySQLDatabaseTasks`.

    We should omit the collation entirely rather than providing a default.
    Then the choice is the responsibility of the server and MySQL distribution.

    *Ryuta Kamizono*

368 369 370 371 372
*   Alias `ActiveRecord::Relation#left_joins` to
    `ActiveRecord::Relation#left_outer_joins`.

    *Takashi Kokubun*

373
*   Use advisory locking to raise a `ConcurrentMigrationError` instead of
S
Sam Davies 已提交
374 375 376 377
    attempting to migrate when another migration is currently running.

    *Sam Davies*

378 379 380
*   Added `ActiveRecord::Relation#left_outer_joins`.

    Example:
381

382
        User.left_outer_joins(:posts)
383 384
        # => SELECT "users".* FROM "users" LEFT OUTER JOIN "posts" ON
             "posts"."user_id" = "users"."id"
385 386 387

    *Florian Thomas*

S
Sean Griffin 已提交
388 389 390 391
*   Support passing an array to `order` for SQL parameter sanitization.

    *Aaron Suggs*

392
*   Avoid disabling errors on the PostgreSQL connection when enabling the
393
    `standard_conforming_strings` setting. Errors were previously disabled because
394 395 396 397 398 399
    the setting wasn't writable in Postgres 8.1 and didn't exist in earlier
    versions. Now Rails only supports Postgres 8.2+ we're fine to assume the
    setting exists. Disabling errors caused problems when using a connection
    pooling tool like PgBouncer because it's not guaranteed to have the same
    connection between calls to `execute` and it could leave the connection
    with errors disabled.
400 401 402 403 404

    Fixes #22101.

    *Harry Marr*

405
*   Set `scope.reordering_value` to `true` if `:reordering`-values are specified.
406 407 408 409 410

    Fixes #21886.

    *Hiroaki Izu*

411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426
*   Add support for bidirectional destroy dependencies.

    Fixes #13609.

    Example:

        class Content < ActiveRecord::Base
          has_one :position, dependent: :destroy
        end

        class Position < ActiveRecord::Base
          belongs_to :content, dependent: :destroy
        end

    *Seb Jacobs*

427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445
*   Includes HABTM returns correct size now. It's caused by the join dependency
    only instantiates one HABTM object because the join table hasn't a primary key.

    Fixes #16032.

    Examples:

        before:

        Project.first.salaried_developers.size # => 3
        Project.includes(:salaried_developers).first.salaried_developers.size # => 1

        after:

        Project.first.salaried_developers.size # => 3
        Project.includes(:salaried_developers).first.salaried_developers.size # => 3

    *Bigxiang*

446 447 448 449 450 451
*   Add option to index errors in nested attributes

    For models which have nested attributes, errors within those models will
    now be indexed if :index_errors is specified when defining a
    has_many relationship, or if its set in the global config.

452
    Example:
453

454 455 456 457
        class Guitar < ActiveRecord::Base
          has_many :tuning_pegs
          accepts_nested_attributes_for :tuning_pegs
        end
458

459 460 461 462
        class TuningPeg < ActiveRecord::Base
          belongs_to :guitar
          validates_numericality_of :pitch
        end
463

464 465
        # Old style
        guitar.errors["tuning_pegs.pitch"] = ["is not a number"]
466

467 468
        # New style (if defined globally, or set in has_many_relationship)
        guitar.errors["tuning_pegs[1].pitch"] = ["is not a number"]
469

470
    *Michael Probber*, *Terence Sun*
471

472 473 474 475
*   Exit with non-zero status for failed database rake tasks.

    *Jay Hayes*

476 477 478 479 480 481 482
*   Queries such as `Computer.joins(:monitor).group(:status).count` will now be
    interpreted as  `Computer.joins(:monitor).group('computers.status').count`
    so that when `Computer` and `Monitor` have both `status` columns we don't
    have conflicts in projection.

    *Rafael Sales*

483
*   Add ability to default to `uuid` as primary key when generating database migrations.
484

485 486
    Example:

487 488 489
        config.generators do |g|
          g.orm :active_record, primary_key_type: :uuid
        end
490 491 492

    *Jon McCartie*

493
*   Don't cache arguments in `#find_by` if they are an `ActiveRecord::Relation`.
494

495
    Fixes #20817.
496 497 498

    *Hiroaki Izu*

499
*   Qualify column name inserted by `group` in calculation.
500 501 502 503 504 505

    Giving `group` an unqualified column name now works, even if the relation
    has `JOIN` with another table which also has a column of the name.

    *Soutaro Matsumoto*

506 507 508 509 510
*   Don't cache prepared statements containing an IN clause or a SQL literal, as
    these queries will change often and are unlikely to have a cache hit.

    *Sean Griffin*

511 512 513 514 515 516
*   Fix `rewhere` in a `has_many` association.

    Fixes #21955.

    *Josh Branchaud*, *Kal*

517 518 519 520 521 522
*   `where` raises ArgumentError on unsupported types.

    Fixes #20473.

    *Jake Worth*

523
*   Add an immutable string type to help reduce memory usage for apps which do
524
    not need mutation detection on strings.
525 526 527

    *Sean Griffin*

J
Jan 已提交
528
*   Give `ActiveRecord::Relation#update` its own deprecation warning when
529 530 531 532 533 534
    passed an `ActiveRecord::Base` instance.

    Fixes #21945.

    *Ted Johansson*

535 536 537 538 539 540 541
*   Make it possible to pass `:to_table` when adding a foreign key through
    `add_reference`.

    Fixes #21563.

    *Yves Senn*

A
Andrew White 已提交
542
*   No longer pass deprecated option `-i` to `pg_dump`.
543 544 545

    *Paul Sadauskas*

546 547
*   Concurrent `AR::Base#increment!` and `#decrement!` on the same record
    are all reflected in the database rather than overwriting each other.
548 549 550

    *Bogdan Gusiev*

551 552 553 554 555 556
*   Avoid leaking the first relation we call `first` on, per model.

    Fixes #21921.

    *Matthew Draper*, *Jean Boussier*

557
*   Remove unused `pk_and_sequence_for` in `AbstractMysqlAdapter`.
558 559 560

    *Ryuta Kamizono*

561
*   Allow fixtures files to set the model class in the YAML file itself.
562 563 564

    To load the fixtures file `accounts.yml` as the `User` model, use:

565 566 567 568
        _fixture:
          model_class: User
        david:
          name: David
569 570 571 572 573

    Fixes #9516.

    *Roque Pinel*

574 575 576 577 578
*   Don't require a database connection to load a class which uses acceptance
    validations.

    *Sean Griffin*

579 580 581 582
*   Correctly apply `unscope` when preloading through associations.

    *Jimmy Bourassa*

583
*   Fixed taking precision into count when assigning a value to timestamp attribute.
584 585 586 587 588 589

    Timestamp column can have less precision than ruby timestamp
    In result in how big a fraction of a second can be stored in the
    database.


590 591
        m = Model.create!
        m.created_at.usec == m.reload.created_at.usec # => false
592 593 594 595 596 597 598 599 600 601
        # due to different precision in Time.now and database column

    If the precision is low enough, (mysql default is 0, so it is always low
    enough by default) the value changes when model is reloaded from the
    database. This patch fixes that issue ensuring that any timestamp
    assigned as an attribute is converted to column precision under the
    attribute.

    *Bogdan Gusiev*

602 603 604 605 606 607 608 609 610 611
*   Introduce `connection.data_sources` and `connection.data_source_exists?`.
    These methods determine what relations can be used to back Active Record
    models (usually tables and views).

    Also deprecate `SchemaCache#tables`, `SchemaCache#table_exists?` and
    `SchemaCache#clear_table_cache!` in favor of their new data source
    counterparts.

    *Yves Senn*, *Matthew Draper*

612
*   Add `ActiveRecord::Base.ignored_columns` to make some columns
613
    invisible from Active Record.
614 615 616

    *Jean Boussier*

617 618 619 620 621
*   `ActiveRecord::Tasks::MySQLDatabaseTasks` fails if shellout to
    mysql commands (like `mysqldump`) is not successful.

    *Steve Mitchell*

622 623
*   Ensure `select` quotes aliased attributes, even when using `from`.

624
    Fixes #21488.
625

626
    *Sean Griffin*, *@johanlunds*
627

628
*   MySQL: support `unsigned` numeric data types.
629 630 631 632

    Example:

        create_table :foos do |t|
633 634 635 636
          t.unsigned_integer :quantity
          t.unsigned_bigint  :total
          t.unsigned_float   :percentage
          t.unsigned_decimal :price, precision: 10, scale: 2
637 638
        end

639
    The `unsigned: true` option may be used for the primary key:
640

641 642 643 644 645 646
        create_table :foos, id: :bigint, unsigned: true do |t|

        end

    *Ryuta Kamizono*

647 648 649 650
*   Add `#views` and `#view_exists?` methods on connection adapters.

    *Ryuta Kamizono*

651 652 653 654 655 656 657 658 659 660 661
*   Correctly dump composite primary key.

    Example:

        create_table :barcodes, primary_key: ["region", "code"] do |t|
          t.string :region
          t.integer :code
        end

    *Ryuta Kamizono*

662 663 664 665 666
*   Lookup the attribute name for `restrict_with_error` messages on the
    model class that defines the association.

    *kuboon*, *Ronak Jangir*

667 668 669 670
*   Correct query for PostgreSQL 8.2 compatibility.

    *Ben Murphy*, *Matthew Draper*

G
Gaurav Sharma 已提交
671
*   `bin/rails db:migrate` uses
672 673
    `ActiveRecord::Tasks::DatabaseTasks.migrations_paths` instead of
    `Migrator.migrations_paths`.
674 675 676

    *Tobias Bielohlawek*

Y
Yves Senn 已提交
677
*   Support dropping indexes concurrently in PostgreSQL.
678 679 680 681 682 683

    See http://www.postgresql.org/docs/9.4/static/sql-dropindex.html for more
    details.

    *Grey Baker*

684
*   Deprecate passing conditions to `ActiveRecord::Relation#delete_all`
Y
Yves Senn 已提交
685
    and `ActiveRecord::Relation#destroy_all`.
686 687 688

    *Wojciech Wnętrzak*

689 690 691 692 693 694 695
*   Instantiating an AR model with `ActionController::Parameters` now raises
    an `ActiveModel::ForbiddenAttributesError` if the parameters include a
    `type` field that has not been explicitly permitted. Previously, the
    `type` field was simply ignored in the same situation.

    *Prem Sichanugrist*

696 697 698 699 700 701 702 703 704 705 706 707
*   PostgreSQL, `create_schema`, `drop_schema` and `rename_table` now quote
    schema names.

    Fixes #21418.

    Example:

        create_schema("my.schema")
        # CREATE SCHEMA "my.schema";

    *Yves Senn*

708 709 710 711 712 713
*   PostgreSQL, add `:if_exists` option to `#drop_schema`. This makes it
    possible to drop a schema that might exist without raising an exception if
    it doesn't.

    *Yves Senn*

714 715 716 717 718 719
*   Only try to nullify has_one target association if the record is persisted.

    Fixes #21223.

    *Agis Anastasopoulos*

720 721 722
*   Uniqueness validator raises descriptive error when running on a persisted
    record without primary key.

Y
Yves Senn 已提交
723
    Fixes #21304.
724 725 726

    *Yves Senn*

727 728 729 730 731 732 733 734 735 736
*   Add a native JSON data type support in MySQL.

    Example:

        create_table :json_data_type do |t|
          t.json :settings
        end

    *Ryuta Kamizono*

737 738
*   Descriptive error message when fixtures contain a missing column.

Y
Yves Senn 已提交
739
    Fixes #21201.
740 741 742

    *Yves Senn*

743 744
*   `ActiveRecord::Tasks::PostgreSQLDatabaseTasks` fail if shellout to
    postgresql commands (like `pg_dump`) is not successful.
745

746 747
    *Bryan Paxton*, *Nate Berkopec*

748 749 750
*   Add `ActiveRecord::Relation#in_batches` to work with records and relations
    in batches.

751
    Available options are `of` (batch size), `load`, `start`, and `finish`.
752 753 754 755 756 757 758 759 760 761 762

    Examples:

        Person.in_batches.each_record(&:party_all_night!)
        Person.in_batches.update_all(awesome: true)
        Person.in_batches.delete_all
        Person.in_batches.each do |relation|
          relation.delete_all
          sleep 10 # Throttles the delete queries
        end

Y
Yves Senn 已提交
763
    Fixes #20933.
764 765 766

    *Sina Siadat*

Y
Yves Senn 已提交
767
*   Added methods for PostgreSQL geometric data types to use in migrations.
768 769 770 771 772 773 774 775 776 777 778 779 780 781

    Example:

        create_table :foo do |t|
          t.line :foo_line
          t.lseg :foo_lseg
          t.box :foo_box
          t.path :foo_path
          t.polygon :foo_polygon
          t.circle :foo_circle
        end

    *Mehmet Emin İNAÇ*

782 783 784 785
*   Add `cache_key` to ActiveRecord::Relation.

    Example:

786 787 788
        @users = User.where("name like ?", "%Alberto%")
        @users.cache_key
        # => "/users/query-5942b155a43b139f2471b872ac54251f-3-20150714212107656125000"
789 790 791

    *Alberto Fernández-Capel*

792 793 794 795
*   Properly allow uniqueness validations on primary keys.

    Fixes #20966.

Y
Yves Senn 已提交
796
    *Sean Griffin*, *presskey*
797

798 799 800 801 802 803 804
*   Don't raise an error if an association failed to destroy when `destroy` was
    called on the parent (as opposed to `destroy!`).

    Fixes #20991.

    *Sean Griffin*

Y
Yves Senn 已提交
805
*   `ActiveRecord::RecordNotFound` modified to store model name, primary_key and
806
    id of the caller model. It allows the catcher of this exception to make
Y
Yves Senn 已提交
807 808 809
    a better decision to what to do with it.

    Example:
810 811 812 813 814 815 816 817 818 819 820 821

        class SomeAbstractController < ActionController::Base
          rescue_from ActiveRecord::RecordNotFound, with: :redirect_to_404

          private def redirect_to_404(e)
            return redirect_to(posts_url) if e.model == 'Post'
            raise
          end
        end

    *Sameer Rahmani*

822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837
*   Deprecate the keys for association `restrict_dependent_destroy` errors in favor
    of new key names.

    Previously `has_one` and `has_many` associations were using the
    `one` and `many` keys respectively. Both of these keys have special
    meaning in I18n (they are considered to be pluralizations) so by
    renaming them to `has_one` and `has_many` we make the messages more explicit
    and most importantly they don't clash with linguistical systems that need to
    validate translation keys (and their pluralizations).

    The `:'restrict_dependent_destroy.one'` key should be replaced with
    `:'restrict_dependent_destroy.has_one'`, and `:'restrict_dependent_destroy.many'`
    with `:'restrict_dependent_destroy.has_many'`.

    *Roque Pinel*, *Christopher Dell*

838 839 840 841 842 843 844 845 846 847 848 849 850 851
*   Fix state being carried over from previous transaction.

    Considering the following example where `name` is a required attribute.
    Before we had `new_record?` returning `true` for a persisted record:

        author = Author.create! name: 'foo'
        author.name = nil
        author.save        # => false
        author.new_record? # => true

    Fixes #20824.

    *Roque Pinel*

852 853 854 855 856 857 858
*   Correctly ignore `mark_for_destruction` when `autosave` isn't set to `true`
    when validating associations.

    Fixes #20882.

    *Sean Griffin*

Y
Yves Senn 已提交
859
*   Fix a bug where counter_cache doesn't always work with polymorphic
860 861 862 863
    relations.

    Fixes #16407.

Y
Yves Senn 已提交
864
    *Stefan Kanev*, *Sean Griffin*
865

866 867 868 869 870 871 872
*   Ensure that cyclic associations with autosave don't cause duplicate errors
    to be added to the parent record.

    Fixes #20874.

    *Sean Griffin*

873 874 875 876 877 878 879
*   Ensure that `ActionController::Parameters` can still be passed to nested
    attributes.

    Fixes #20922.

    *Sean Griffin*

880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897
*   Deprecate force association reload by passing a truthy argument to
    association method.

    For collection association, you can call `#reload` on association proxy to
    force a reload:

        @user.posts.reload   # Instead of @user.posts(true)

    For singular association, you can call `#reload` on the parent object to
    clear its association cache then call the association method:

        @user.reload.profile   # Instead of @user.profile(true)

    Passing a truthy argument to force association to reload will be removed in
    Rails 5.1.

    *Prem Sichanugrist*

898 899 900 901 902
*   Replaced `ActiveSupport::Concurrency::Latch` with `Concurrent::CountDownLatch`
    from the concurrent-ruby gem.

    *Jerry D'Antonio*

903 904 905 906 907 908 909 910
*   Fix through associations using scopes having the scope merged multiple
    times.

    Fixes #20721.
    Fixes #20727.

    *Sean Griffin*

911 912 913 914 915 916 917
*   `ActiveRecord::Base.dump_schema_after_migration` applies migration tasks
    other than `db:migrate`. (eg. `db:rollback`, `db:migrate:dup`, ...)

    Fixes #20743.

    *Yves Senn*

918 919 920 921 922 923 924 925
*   Add alternate syntax to make `change_column_default` reversible.

    User can pass in `:from` and `:to` to make `change_column_default` command
    become reversible.

    Example:

        change_column_default :posts, :status, from: nil, to: "draft"
D
Dmitry Zudochkin 已提交
926
        change_column_default :users, :authorized, from: true, to: false
927 928 929

    *Prem Sichanugrist*

930 931 932 933 934 935 936
*   Prevent error when using `force_reload: true` on an unassigned polymorphic
    belongs_to association.

    Fixes #20426.

    *James Dabbs*

937 938
*   Correctly raise `ActiveRecord::AssociationTypeMismatch` when assigning
    a wrong type to a namespaced association.
939

940
    Fixes #20545.
941 942 943

    *Diego Carrion*

944 945 946 947 948 949
*   `validates_absence_of` respects `marked_for_destruction?`.

    Fixes #20449.

    *Yves Senn*

950 951
*   Include the `Enumerable` module in `ActiveRecord::Relation`

952
    *Sean Griffin*, *bogdan*
953

954 955 956 957
*   Use `Enumerable#sum` in `ActiveRecord::Relation` if a block is given.

    *Sean Griffin*

958
*   Let `WITH` queries (Common Table Expressions) be explainable.
959 960 961

    *Vladimir Kochnev*

962 963 964 965
*   Make `remove_index :table, :column` reversible.

    *Yves Senn*

966 967 968 969 970 971 972
*   Fixed an error which would occur in dirty checking when calling
    `update_attributes` from a getter.

    Fixes #20531.

    *Sean Griffin*

973 974
*   Make `remove_foreign_key` reversible. Any foreign key options must be
    specified, similar to `remove_column`.
975 976 977

    *Aster Ryan*

978
*   Add `:_prefix` and `:_suffix` options to `enum` definition.
979

980
    Fixes #17511, #17415.
981 982 983

    *Igor Kapkov*

984 985 986 987
*   Correctly handle decimal arrays with defaults in the schema dumper.

    Fixes #20515.

988
    *Sean Griffin*, *jmondo*
989

990
*   Deprecate the PostgreSQL `:point` type in favor of a new one which will return
991 992 993 994
    `Point` objects instead of an `Array`

    *Sean Griffin*

995 996 997 998 999 1000 1001
*   Ensure symbols passed to `ActiveRecord::Relation#select` are always treated
    as columns.

    Fixes #20360.

    *Sean Griffin*

1002 1003
*   Do not set `sql_mode` if `strict: :default` is specified.

Y
Yves Senn 已提交
1004
        # config/database.yml
1005 1006 1007 1008 1009 1010 1011 1012
        production:
          adapter: mysql2
          database: foo_prod
          user: foo
          strict: :default

    *Ryuta Kamizono*

1013 1014 1015
*   Allow proc defaults to be passed to the attributes API. See documentation
    for examples.

1016
    *Sean Griffin*, *Kir Shatrov*
1017

1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032
*   SQLite: `:collation` support for string and text columns.

    Example:

        create_table :foo do |t|
          t.string :string_nocase, collation: 'NOCASE'
          t.text :text_rtrim, collation: 'RTRIM'
        end

        add_column :foo, :title, :string, collation: 'RTRIM'

        change_column :foo, :title, :string, collation: 'NOCASE'

    *Akshay Vishnoi*

G
George Claghorn 已提交
1033 1034 1035 1036 1037 1038 1039 1040 1041
*   Allow the use of symbols or strings to specify enum values in test
    fixtures:

        awdr:
          title: "Agile Web Development with Rails"
          status: :proposed

    *George Claghorn*

1042
*   Clear query cache when `ActiveRecord::Base#reload` is called.
1043

1044
    *Shane Hender, Pierre Nespo*
1045

1046 1047 1048 1049
*   Include stored procedures and function on the MySQL structure dump.

    *Jonathan Worek*

1050 1051
*   Pass `:extend` option for `has_and_belongs_to_many` associations to the
    underlying `has_many :through`.
1052 1053 1054

    *Jaehyun Shin*

1055 1056 1057 1058 1059 1060
*   Deprecate `Relation#uniq` use `Relation#distinct` instead.

    See #9683.

    *Yves Senn*

1061 1062
*   Allow single table inheritance instantiation to work when storing
    demodulized class names.
1063 1064 1065

    *Alex Robbin*

1066 1067
*   Correctly pass MySQL options when using `structure_dump` or
    `structure_load`.
1068 1069 1070 1071 1072

    Specifically, it fixes an issue when using SSL authentication.

    *Alex Coomans*

1073 1074 1075 1076
*   Correctly dump `:options` on `create_table` for MySQL.

    *Ryuta Kamizono*

1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087
*   PostgreSQL: `:collation` support for string and text columns.

    Example:

        create_table :foos do |t|
          t.string :string_en, collation: 'en_US.UTF-8'
          t.text   :text_ja,   collation: 'ja_JP.UTF-8'
        end

    *Ryuta Kamizono*

1088 1089 1090 1091
*   Remove `ActiveRecord::Serialization::XmlSerializer` from core.

    *Zachary Scott*

1092 1093 1094 1095
*   Make `unscope` aware of "less than" and "greater than" conditions.

    *TAKAHASHI Kazuaki*

1096 1097 1098 1099 1100
*   `find_by` and `find_by!` raise `ArgumentError` when called without
    arguments.

    *Kohei Suzuki*

1101 1102 1103 1104 1105 1106 1107
*   Revert behavior of `db:schema:load` back to loading the full
    environment. This ensures that initializers are run.

    Fixes #19545.

    *Yves Senn*

1108 1109 1110 1111 1112 1113 1114 1115
*   Fix missing index when using `timestamps` with the `index` option.

    The `index` option used with `timestamps` should be passed to both
    `column` definitions for `created_at` and `updated_at` rather than just
    the first.

    *Paul Mucur*

1116 1117 1118 1119 1120 1121
*   Rename `:class` to `:anonymous_class` in association options.

    Fixes #19659.

    *Andrew White*

1122 1123 1124 1125 1126 1127 1128
*   Autosave existing records on a has many through association when the parent
    is new.

    Fixes #19782.

    *Sean Griffin*

1129 1130
*   Fixed a bug where uniqueness validations would error on out of range values,
    even if an validation should have prevented it from hitting the database.
1131 1132 1133

    *Andrey Voronkov*

1134
*   MySQL: `:charset` and `:collation` support for string and text columns.
1135 1136 1137 1138 1139 1140 1141 1142 1143 1144

    Example:

        create_table :foos do |t|
          t.string :string_utf8_bin, charset: 'utf8', collation: 'utf8_bin'
          t.text   :text_ascii,      charset: 'ascii'
        end

    *Ryuta Kamizono*

1145 1146 1147 1148 1149 1150 1151
*   Foreign key related methods in the migration DSL respect
    `ActiveRecord::Base.pluralize_table_names = false`.

    Fixes #19643.

    *Mehmet Emin İNAÇ*

Y
Yves Senn 已提交
1152
*   Reduce memory usage from loading types on PostgreSQL.
1153 1154 1155 1156 1157

    Fixes #19578.

    *Sean Griffin*

Y
Yves Senn 已提交
1158
*   Add `config.active_record.warn_on_records_fetched_greater_than` option.
1159 1160

    When set to an integer, a warning will be logged whenever a result set
Y
Yves Senn 已提交
1161 1162 1163
    larger than the specified size is returned by a query.

    Fixes #16463.
1164 1165 1166

    *Jason Nochlin*

Y
Yves Senn 已提交
1167
*   Ignore `.psqlrc` when loading database structure.
1168 1169 1170

    *Jason Weathered*

1171 1172
*   Fix referencing wrong table aliases while joining tables of has many through
    association (only when calling calculation methods).
1173

1174
    Fixes #19276.
1175 1176 1177

    *pinglamb*

1178 1179 1180 1181 1182 1183 1184
*   Correctly persist a serialized attribute that has been returned to
    its default value by an in-place modification.

    Fixes #19467.

    *Matthew Draper*

1185 1186 1187 1188 1189 1190 1191 1192
*   Fix generating the schema file when using PostgreSQL `BigInt[]` data type.
    Previously the `limit: 8` was not coming through, and this caused it to
    become `Int[]` data type after rebuilding from the schema.

    Fixes #19420.

    *Jake Waller*

1193 1194 1195 1196 1197
*   Reuse the `CollectionAssociation#reader` cache when the foreign key is
    available prior to save.

    *Ben Woosley*

1198 1199 1200 1201 1202 1203 1204
*   Add `config.active_record.dump_schemas` to fix `db:structure:dump`
    when using schema_search_path and PostgreSQL extensions.

    Fixes #17157.

    *Ryan Wallace*

1205 1206 1207 1208 1209 1210
*   Renaming `use_transactional_fixtures` to `use_transactional_tests` for clarity.

    Fixes #18864.

    *Brandon Weiss*

1211 1212 1213 1214 1215
*   Increase pg gem version requirement to `~> 0.18`. Earlier versions of the
    pg gem are known to have problems with Ruby 2.2.

    *Matt Brictson*

1216 1217 1218 1219
*   Correctly dump `serial` and `bigserial`.

    *Ryuta Kamizono*

1220 1221 1222 1223
*   Fix default `format` value in `ActiveRecord::Tasks::DatabaseTasks#schema_file`.

    *James Cox*

1224 1225
*   Don't enroll records in the transaction if they don't have commit callbacks.
    This was causing a memory leak when creating many records inside a transaction.
1226 1227 1228 1229 1230

    Fixes #15549.

    *Will Bryant*, *Aaron Patterson*

1231 1232 1233 1234 1235 1236 1237
*   Correctly create through records when created on a has many through
    association when using `where`.

    Fixes #19073.

    *Sean Griffin*

1238
*   Add `SchemaMigration.create_table` support for any unicode charsets with MySQL.
1239 1240 1241

    *Ryuta Kamizono*

1242
*   PostgreSQL no longer disables user triggers if system triggers can't be
1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255
    disabled. Disabling user triggers does not fulfill what the method promises.
    Rails currently requires superuser privileges for this method.

    If you absolutely rely on this behavior, consider patching
    `disable_referential_integrity`.

    *Yves Senn*

*   Restore aborted transaction state when `disable_referential_integrity` fails
    due to missing permissions.

    *Toby Ovod-Everett*, *Yves Senn*

1256 1257
*   In PostgreSQL, print a warning message if `disable_referential_integrity`
    fails due to missing permissions.
1258 1259 1260

    *Andrey Nering*, *Yves Senn*

1261
*   Allow a `:limit` option for MySQL bigint primary key support.
1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275

    Example:

        create_table :foos, id: :primary_key, limit: 8 do |t|
        end

        # or

        create_table :foos, id: false do |t|
          t.primary_key :id, limit: 8
        end

    *Ryuta Kamizono*

1276 1277 1278 1279 1280 1281 1282
*   `belongs_to` will now trigger a validation error by default if the association is not present.
    You can turn this off on a per-association basis with `optional: true`.
    (Note this new default only applies to new Rails apps that will be generated with
    `config.active_record.belongs_to_required_by_default = true` in initializer.)

    *Josef Šimánek*

1283
*   Fixed `ActiveRecord::Relation#becomes!` and `changed_attributes` issues for type
1284
    columns.
1285 1286 1287 1288 1289

    Fixes #17139.

    *Miklos Fazekas*

1290 1291 1292 1293
*   Format the time string according to the precision of the time column.

    *Ryuta Kamizono*

1294
*   Allow a `:precision` option for time type columns.
1295 1296 1297

    *Ryuta Kamizono*

1298
*   Add `ActiveRecord::Base.suppress` to prevent the receiver from being saved
M
Michael Ryan 已提交
1299 1300 1301 1302 1303 1304
    during the given block.

    For example, here's a pattern of creating notifications when new comments
    are posted. (The notification may in turn trigger an email, a push
    notification, or just appear in the UI somewhere):

1305 1306 1307 1308 1309
        class Comment < ActiveRecord::Base
          belongs_to :commentable, polymorphic: true
          after_create -> { Notification.create! comment: self,
            recipients: commentable.recipients }
        end
M
Michael Ryan 已提交
1310

1311 1312 1313 1314
    That's what you want the bulk of the time. A new comment creates a new
    Notification. There may be edge cases where you don't want that, like
    when copying a commentable and its comments, in which case write a
    concern with something like this:
M
Michael Ryan 已提交
1315

1316 1317 1318 1319 1320 1321 1322
        module Copyable
          def copy_to(destination)
            Notification.suppress do
              # Copy logic that creates new comments that we do not want triggering
              # notifications.
            end
          end
M
Michael Ryan 已提交
1323 1324 1325 1326
        end

    *Michael Ryan*

1327 1328
*   `:time` option added for `#touch`.

H
Hyonjee Joo 已提交
1329 1330 1331 1332
    Fixes #18905.

    *Hyonjee Joo*

1333
*   Deprecate passing of `start` value to `find_in_batches` and `find_each`
1334 1335 1336 1337
    in favour of `begin_at` value.

    *Vipul A M*

1338 1339 1340 1341
*   Add `foreign_key_exists?` method.

    *Tõnis Simo*

1342 1343 1344 1345
*   Use SQL COUNT and LIMIT 1 queries for `none?` and `one?` methods
    if no block or limit is given, instead of loading the entire
    collection into memory. This applies to relations (e.g. `User.all`)
    as well as associations (e.g. `account.users`)
1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364

        # Before:

        users.none?
        # SELECT "users".* FROM "users"

        users.one?
        # SELECT "users".* FROM "users"

        # After:

        users.none?
        # SELECT 1 AS one FROM "users" LIMIT 1

        users.one?
        # SELECT COUNT(*) FROM "users"

    *Eugene Gilburg*

1365 1366 1367 1368 1369
*   Have `enum` perform type casting consistently with the rest of Active
    Record, such as `where`.

    *Sean Griffin*

1370
*   `scoping` no longer pollutes the current scope of sibling classes when using
1371 1372 1373 1374 1375
    STI.

    Fixes #18806.

    Example:
1376

1377 1378 1379
        StiOne.none.scoping do
          StiTwo.all
        end
1380 1381 1382 1383


    *Sean Griffin*

1384 1385 1386 1387 1388 1389 1390 1391
*   `remove_reference` with `foreign_key: true` removes the foreign key before
    removing the column. This fixes a bug where it was not possible to remove
    the column on MySQL.

    Fixes #18664.

    *Yves Senn*

1392
*   `find_in_batches` now accepts an `:finish` parameter that complements the `:start`
1393 1394 1395 1396
     parameter to specify where to stop batch processing.

    *Vipul A M*

1397
*   Fix a rounding problem for PostgreSQL timestamp columns.
1398

1399 1400
    If a timestamp column has a precision specified, it needs to
    format according to that.
1401 1402 1403

    *Ryuta Kamizono*

1404 1405
*   Respect the database default charset for `schema_migrations` table.

1406
    The charset of `version` column in `schema_migrations` table depends
1407 1408 1409 1410 1411
    on the database default charset and collation rather than the encoding
    of the connection.

    *Ryuta Kamizono*

1412 1413
*   Raise `ArgumentError` when passing `nil` or `false` to `Relation#merge`.

1414
    These are not valid values to merge in a relation, so it should warn users
1415 1416 1417 1418
    early.

    *Rafael Mendonça França*

1419
*   Use `SCHEMA` instead of `DB_STRUCTURE` for specifying a structure file.
1420

1421
    This makes the `db:structure` tasks consistent with `test:load_structure`.
1422 1423 1424

    *Dieter Komendera*

1425 1426 1427 1428 1429 1430
*   Respect custom primary keys for associations when calling `Relation#where`

    Fixes #18813.

    *Sean Griffin*

1431
*   Fix several edge cases which could result in a counter cache updating
1432 1433 1434 1435 1436 1437
    twice or not updating at all for `has_many` and `has_many :through`.

    Fixes #10865.

    *Sean Griffin*

1438 1439 1440 1441 1442 1443 1444 1445 1446
*   Foreign keys added by migrations were given random, generated names. This
    meant a different `structure.sql` would be generated every time a developer
    ran migrations on their machine.

    The generated part of foreign key names is now a hash of the table name and
    column name, which is consistent every time you run the migration.

    *Chris Sinjakli*

1447 1448 1449 1450 1451 1452 1453 1454 1455 1456
*   Validation errors would be raised for parent records when an association
    was saved when the parent had `validate: false`. It should not be the
    responsibility of the model to validate an associated object unless the
    object was created or modified by the parent.

    This fixes the issue by skipping validations if the parent record is
    persisted, not changed, and not marked for destruction.

    Fixes #17621.

1457
    *Eileen M. Uchitelle*, *Aaron Patterson*
1458

1459 1460 1461 1462
*   Fix n+1 query problem when eager loading nil associations (fixes #18312)

    *Sammy Larbi*

1463
*   Change the default error message from `can't be blank` to `must exist` for
1464 1465
    the presence validator of the `:required` option on `belongs_to`/`has_one`
    associations.
1466 1467 1468

    *Henrik Nygren*

1469 1470
*   Fixed `ActiveRecord::Relation#group` method when an argument is an SQL
    reserved keyword:
1471

Y
Yves Senn 已提交
1472 1473 1474 1475
    Example:

        SplitTest.group(:key).count
        Property.group(:value).count
1476 1477 1478

    *Bogdan Gusiev*

1479
*   Added the `#or` method on `ActiveRecord::Relation`, allowing use of the OR
1480 1481 1482 1483 1484 1485 1486 1487 1488
    operator to combine WHERE or HAVING clauses.

    Example:

        Post.where('id = 1').or(Post.where('id = 2'))
        # => SELECT * FROM posts WHERE (id = 1) OR (id = 2)

    *Sean Griffin*, *Matthew Draper*, *Gael Muller*, *Olivier El Mekki*

1489 1490 1491 1492 1493 1494 1495
*   Don't define autosave association callbacks twice from
    `accepts_nested_attributes_for`.

    Fixes #18704.

    *Sean Griffin*

1496 1497 1498 1499 1500 1501 1502 1503
*   Integer types will no longer raise a `RangeError` when assigning an
    attribute, but will instead raise when going to the database.

    Fixes several vague issues which were never reported directly. See the
    commit message from the commit which added this line for some examples.

    *Sean Griffin*

1504
*   Values which would error while being sent to the database (such as an
1505
    ASCII-8BIT string with invalid UTF-8 bytes on SQLite3), no longer error on
1506 1507 1508 1509 1510 1511 1512
    assignment. They will still error when sent to the database, but you are
    given the ability to re-assign it to a valid value.

    Fixes #18580.

    *Sean Griffin*

1513 1514
*   Don't remove join dependencies in `Relation#exists?`

1515
    Fixes #18632.
1516 1517 1518

    *Sean Griffin*

1519 1520 1521 1522 1523 1524
*   Invalid values assigned to a JSON column are assumed to be `nil`.

    Fixes #18629.

    *Sean Griffin*

1525 1526 1527 1528 1529 1530
*   Add `ActiveRecord::Base#accessed_fields`, which can be used to quickly
    discover which fields were read from a model when you are looking to only
    select the data you need from the database.

    *Sean Griffin*

1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545
*   Introduce the `:if_exists` option for `drop_table`.

    Example:

        drop_table(:posts, if_exists: true)

    That would execute:

        DROP TABLE IF EXISTS posts

    If the table doesn't exist, `if_exists: false` (the default) raises an
    exception whereas `if_exists: true` does nothing.

    *Cody Cutrer*, *Stefan Kanev*, *Ryuta Kamizono*

1546 1547 1548 1549
*   Don't run SQL if attribute value is not changed for update_attribute method.

    *Prathamesh Sonpatki*

1550
*   `time` columns can now get affected by `time_zone_aware_attributes`. If you have
1551
    set `config.time_zone` to a value other than `'UTC'`, they will be treated
1552
    as in that time zone by default in Rails 5.1. If this is not the desired
1553 1554 1555 1556 1557 1558 1559
    behavior, you can set

        ActiveRecord::Base.time_zone_aware_types = [:datetime]

    A deprecation warning will be emitted if you have a `:time` column, and have
    not explicitly opted out.

Y
Yves Senn 已提交
1560
    Fixes #3145.
1561 1562 1563

    *Sean Griffin*

1564 1565 1566 1567 1568 1569 1570 1571 1572
*   Tests now run after_commit callbacks. You no longer have to declare
    `uses_transaction ‘test name’` to test the results of an after_commit.

    after_commit callbacks run after committing a transaction whose parent
    is not `joinable?`: un-nested transactions, transactions within test cases,
    and transactions in `console --sandbox`.

    *arthurnn*, *Ravil Bayramgalin*, *Matthew Draper*

1573 1574 1575 1576 1577
*   `nil` as a value for a binary column in a query no longer logs as
    "<NULL binary data>", and instead logs as just "nil".

    *Sean Griffin*

1578 1579 1580 1581 1582 1583 1584
*   `attribute_will_change!` will no longer cause non-persistable attributes to
    be sent to the database.

    Fixes #18407.

    *Sean Griffin*

1585 1586
*   Remove support for the `protected_attributes` gem.

1587
    *Carlos Antonio da Silva*, *Roberto Miranda*
1588

1589
*   Fix accessing of fixtures having non-string labels like Fixnum.
1590 1591 1592

    *Prathamesh Sonpatki*

1593
*   Remove deprecated support to preload instance-dependent associations.
1594 1595 1596

    *Yves Senn*

1597 1598 1599 1600
*   Remove deprecated support for PostgreSQL ranges with exclusive lower bounds.

    *Yves Senn*

1601
*   Remove deprecation when modifying a relation with cached Arel.
1602 1603 1604 1605
    This raises an `ImmutableRelation` error instead.

    *Yves Senn*

Y
Yves Senn 已提交
1606 1607
*   Added `ActiveRecord::SecureToken` in order to encapsulate generation of
    unique tokens for attributes in a model using `SecureRandom`.
1608 1609 1610

    *Roberto Miranda*

1611 1612 1613 1614 1615 1616 1617 1618 1619
*   Change the behavior of boolean columns to be closer to Ruby's semantics.

    Before this change we had a small set of "truthy", and all others are "falsy".

    Now, we have a small set of "falsy" values and all others are "truthy" matching
    Ruby's semantics.

    *Rafael Mendonça França*

1620 1621 1622 1623
*   Deprecate `ActiveRecord::Base.errors_in_transactional_callbacks=`.

    *Rafael Mendonça França*

1624
*   Change transaction callbacks to not swallow errors.
1625

1626 1627
    Before this change any errors raised inside a transaction callback
    were getting rescued and printed in the logs.
1628

1629
    Now these errors are not rescued anymore and just bubble up, as the other callbacks.
1630 1631 1632

    *Rafael Mendonça França*

1633 1634 1635 1636
*   Remove deprecated `sanitize_sql_hash_for_conditions`.

    *Rafael Mendonça França*

1637 1638 1639 1640
*   Remove deprecated `Reflection#source_macro`.

    *Rafael Mendonça França*

1641 1642 1643 1644
*   Remove deprecated `symbolized_base_class` and `symbolized_sti_name`.

    *Rafael Mendonça França*

1645 1646 1647 1648
*   Remove deprecated `ActiveRecord::Base.disable_implicit_join_references=`.

    *Rafael Mendonça França*

1649
*   Remove deprecated access to connection specification using a string accessor.
1650 1651 1652 1653 1654

    Now all strings will be handled as a URL.

    *Rafael Mendonça França*

1655 1656 1657 1658
*   Change the default `null` value for `timestamps` to `false`.

    *Rafael Mendonça França*

1659 1660 1661 1662
*   Return an array of pools from `connection_pools`.

    *Rafael Mendonça França*

1663 1664 1665 1666
*   Return a null column from `column_for_attribute` when no column exists.

    *Rafael Mendonça França*

1667 1668 1669 1670
*   Remove deprecated `serialized_attributes`.

    *Rafael Mendonça França*

1671 1672 1673 1674
*   Remove deprecated automatic counter caches on `has_many :through`.

    *Rafael Mendonça França*

1675 1676 1677 1678
*   Change the way in which callback chains can be halted.

    The preferred method to halt a callback chain from now on is to explicitly
    `throw(:abort)`.
1679
    In the past, returning `false` in an Active Record `before_` callback had the
1680 1681
    side effect of halting the callback chain.
    This is not recommended anymore and, depending on the value of the
1682
    `ActiveSupport.halt_callback_chains_on_return_false` option, will
1683
    either not work at all or display a deprecation warning.
1684 1685 1686

    *claudiob*

1687
*   Clear query cache on rollback.
Y
Yves Senn 已提交
1688

1689
    *Florian Weingarten*
Y
Yves Senn 已提交
1690

1691
*   Fix setting of foreign_key for through associations when building a new record.
1692 1693 1694 1695 1696

    Fixes #12698.

    *Ivan Antropov*

1697
*   Improve dumping of the primary key. If it is not a default primary key,
1698 1699 1700 1701 1702 1703
    correctly dump the type and options.

    Fixes #14169, #16599.

    *Ryuta Kamizono*

1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714
*   Format the datetime string according to the precision of the datetime field.

    Incompatible to rounding behavior between MySQL 5.6 and earlier.

    In 5.5, when you insert `2014-08-17 12:30:00.999999` the fractional part
    is ignored. In 5.6, it's rounded to `2014-08-17 12:30:01`:

    http://bugs.mysql.com/bug.php?id=68760

    *Ryuta Kamizono*

1715
*   Allow a precision option for MySQL datetimes.
1716 1717 1718

    *Ryuta Kamizono*

1719
*   Fixed automatic `inverse_of` for models nested in a module.
1720 1721 1722

    *Andrew McCloud*

1723 1724 1725
*   Change `ActiveRecord::Relation#update` behavior so that it can
    be called without passing ids of the records to be updated.

1726
    This change allows updating multiple records returned by
1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738
    `ActiveRecord::Relation` with callbacks and validations.

        # Before
        # ArgumentError: wrong number of arguments (1 for 2)
        Comment.where(group: 'expert').update(body: "Group of Rails Experts")

        # After
        # Comments with group expert updated with body "Group of Rails Experts"
        Comment.where(group: 'expert').update(body: "Group of Rails Experts")

    *Prathamesh Sonpatki*

1739 1740 1741 1742 1743 1744
*   Fix `reaping_frequency` option when the value is a string.

    This usually happens when it is configured using `DATABASE_URL`.

    *korbin*

1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757
*   Fix error message when trying to create an associated record and the foreign
    key is missing.

    Before this fix the following exception was being raised:

        NoMethodError: undefined method `val' for #<Arel::Nodes::BindParam:0x007fc64d19c218>

    Now the message is:

        ActiveRecord::UnknownAttributeError: unknown attribute 'foreign_key' for Model.

    *Rafael Mendonça França*

1758 1759 1760 1761 1762 1763 1764
*   Fix change detection problem for PostgreSQL bytea type and
    `ArgumentError: string contains null byte` exception with pg-0.18.

    Fixes #17680.

    *Lars Kanis*

1765 1766 1767 1768
*   When a table has a composite primary key, the `primary_key` method for
    SQLite3 and PostgreSQL adapters was only returning the first field of the key.
    Ensures that it will return nil instead, as Active Record doesn't support
    composite primary keys.
1769 1770 1771 1772 1773

    Fixes #18070.

    *arthurnn*

1774
*   `validates_size_of` / `validates_length_of` do not count records
1775 1776 1777 1778 1779 1780
    which are `marked_for_destruction?`.

    Fixes #7247.

    *Yves Senn*

1781 1782 1783 1784 1785 1786
*   Ensure `first!` and friends work on loaded associations.

    Fixes #18237.

    *Sean Griffin*

1787 1788
*   `eager_load` preserves readonly flag for associations.

Y
Yves Senn 已提交
1789
    Fixes #15853.
1790 1791 1792

    *Takashi Kokubun*

1793
*   Provide `:touch` option to `save()` to accommodate saving without updating
1794 1795
    timestamps.

1796
    Fixes #18202.
1797 1798 1799

    *Dan Olson*

1800
*   Provide a more helpful error message when an unsupported class is passed to
1801
    `serialize`.
1802

1803
    Fixes #18224.
1804 1805 1806

    *Sean Griffin*

1807 1808 1809 1810 1811 1812 1813 1814 1815
*   Add bigint primary key support for MySQL.

    Example:

        create_table :foos, id: :bigint do |t|
        end

    *Ryuta Kamizono*

1816
*   Support for any type of primary key.
R
Ryuta Kamizono 已提交
1817 1818 1819 1820 1821

    Fixes #14194.

    *Ryuta Kamizono*

1822 1823 1824 1825
*   Dump the default `nil` for PostgreSQL UUID primary key.

    *Ryuta Kamizono*

1826 1827 1828 1829 1830 1831
*   Add a `:foreign_key` option to `references` and associated migration
    methods. The model and migration generators now use this option, rather than
    the `add_foreign_key` form.

    *Sean Griffin*

1832 1833 1834 1835 1836
*   Don't raise when writing an attribute with an out-of-range datetime passed
    by the user.

    *Grey Baker*

1837 1838 1839 1840 1841
*   Replace deprecated `ActiveRecord::Tasks::DatabaseTasks#load_schema` with
    `ActiveRecord::Tasks::DatabaseTasks#load_schema_for`.

    *Yves Senn*

1842
*   Fix bug with `ActiveRecord::Type::Numeric` that caused negative values to
1843 1844
    be marked as having changed when set to the same negative value.

Y
Yves Senn 已提交
1845
    Fixes #18161.
1846 1847 1848

    *Daniel Fox*

1849 1850 1851 1852 1853 1854 1855
*   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*

1856 1857 1858 1859
*   `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.

Y
Yves Senn 已提交
1860
    Fixes #17945.
1861 1862 1863

    *Yves Senn*

Y
Yves Senn 已提交
1864
*   Fix undesirable RangeError by `Type::Integer`. Add `Type::UnsignedInteger`.
1865 1866 1867

    *Ryuta Kamizono*

1868 1869 1870 1871
*   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.

1872
    *Ulisses Almeida*, *Kassio Borges*
1873

1874 1875 1876 1877 1878
*   Remove deprecated behavior allowing nested arrays to be passed as query
    values.

    *Melanie Gilman*

1879 1880 1881 1882 1883
*   Deprecate passing a class as a value in a query. Users should pass strings
    instead.

    *Melanie Gilman*

1884 1885 1886 1887 1888
*   `add_timestamps` and `remove_timestamps` now properly reversible with
    options.

    *Noam Gagliardi-Rabinovich*

1889 1890 1891 1892 1893 1894 1895
*   `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*

1896
Please check [4-2-stable](https://github.com/rails/rails/blob/4-2-stable/activerecord/CHANGELOG.md) for previous changes.