CHANGELOG.md 49.7 KB
Newer Older
S
Sean Griffin 已提交
1 2
## Rails 5.0.0.beta2 (February 01, 2016) ##

3 4 5 6 7 8 9 10 11 12 13 14 15 16
*   `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*

17 18 19 20 21
*   Improve schema_migrations insertion performance by inserting all versions
    in one INSERT SQL.

    *Akira Matsuda*, *Naoto Koshikawa*

22 23 24 25 26 27 28 29 30
*   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*

31 32 33 34 35 36 37 38
*   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*

39 40 41 42 43
*   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.
44 45 46 47 48 49 50 51 52

    Example:

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

    *Ryuta Kamizono*

53 54
*   Fix regression when loading fixture files with symbol keys.

55
    Fixes #22584.
56 57 58

    *Yves Senn*

59
*   Use `version` column as primary key for schema_migrations table because
60
    `schema_migrations` versions are guaranteed to be unique.
61 62 63 64 65 66

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

    *Richard Schneeman*

67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
*   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*

86 87 88 89 90
*   Take into account UTC offset when assigning string representation of
    timestamp with offset specified to attribute of time type.

    *Andrey Novikov*

91 92 93 94 95
*   When calling `first` with a `limit` argument, return directly from the
    `loaded?` records if available.

    *Ben Woosley*

96 97 98 99 100
*   Deprecate sending the `offset` argument to `find_nth`. Please use the
    `offset` method on relation instead.

    *Ben Woosley*

101 102
## Rails 5.0.0.beta1 (December 18, 2015) ##

103 104 105 106 107 108 109
*   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*

110 111 112 113 114
*   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*

115 116 117 118 119 120 121
*   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*

122 123 124 125 126
*   Ignore index name in `index_exists?` and `remove_index` when not passed a
    name to check for.

    *Grey Baker*

127 128 129 130 131
*   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*

132 133 134 135
*   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.
136 137

    Newly generated applications have `app/models/application_record.rb`
138
    present by default.
139 140 141

    *Genadi Samokovarov*

142 143 144 145
*   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.

146 147 148 149 150 151 152 153
    New migrations specify the Rails version they were written for:

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

154 155
    *Matthew Draper*, *Ravil Bayramgalin*

156 157 158 159 160
*   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.

161
    Fixes #22250.
162 163 164

    *Sean Griffin*

165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182
*   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*

183 184 185 186
*   Respect the column default values for `inheritance_column` when
    instantiating records through the base class.

    Fixes #17121.
187 188 189

    Example:

190
        # The schema of BaseModel has `t.string :type, default: 'SubType'`
191 192 193 194 195
        subtype = BaseModel.new
        assert_equals SubType, subtype.class

    *Kuldeep Aggarwal*

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

198
    Fixes #22346.
199

200 201
    *Nick Muerdter*, *ckoenig*

202 203 204 205
*   Add schema dumping support for PostgreSQL geometric data types.

    *Ryuta Kamizono*

206 207
*   Except keys of `build_record`'s argument from `create_scope` in `initialize_attributes`.

208
    Fixes #21893.
209 210 211

    *Yuichiro Kaneko*

212 213 214 215 216 217 218 219 220 221 222 223 224 225
*   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*

226 227 228 229 230 231 232 233
*   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*

234 235 236 237 238
*   Change connection management middleware to return a new response with
    a body proxy, rather than mutating the original.

    *Kevin Buchanan*

239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279
*   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*

280 281 282 283 284
*   Define `ActiveRecord::Sanitization.sanitize_sql_for_order` and use it inside
    `preprocess_order_args`.

    *Yuichiro Kaneko*

285 286 287 288
*   Allow bigint with default nil for avoiding auto increment primary key.

    *Ryuta Kamizono*

289 290 291 292 293 294 295
*   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*

296 297 298 299 300
*   Alias `ActiveRecord::Relation#left_joins` to
    `ActiveRecord::Relation#left_outer_joins`.

    *Takashi Kokubun*

301
*   Use advisory locking to raise a `ConcurrentMigrationError` instead of
S
Sam Davies 已提交
302 303 304 305
    attempting to migrate when another migration is currently running.

    *Sam Davies*

306 307 308
*   Added `ActiveRecord::Relation#left_outer_joins`.

    Example:
309

310
        User.left_outer_joins(:posts)
311 312
        # => SELECT "users".* FROM "users" LEFT OUTER JOIN "posts" ON
             "posts"."user_id" = "users"."id"
313 314 315

    *Florian Thomas*

S
Sean Griffin 已提交
316 317 318 319
*   Support passing an array to `order` for SQL parameter sanitization.

    *Aaron Suggs*

320
*   Avoid disabling errors on the PostgreSQL connection when enabling the
321
    `standard_conforming_strings` setting. Errors were previously disabled because
322 323 324 325 326 327
    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.
328 329 330 331 332

    Fixes #22101.

    *Harry Marr*

333
*   Set `scope.reordering_value` to `true` if `:reordering`-values are specified.
334 335 336 337 338

    Fixes #21886.

    *Hiroaki Izu*

339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354
*   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*

355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373
*   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*

374 375 376 377 378 379
*   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.

380
    Example:
381

382 383 384 385
        class Guitar < ActiveRecord::Base
          has_many :tuning_pegs
          accepts_nested_attributes_for :tuning_pegs
        end
386

387 388 389 390
        class TuningPeg < ActiveRecord::Base
          belongs_to :guitar
          validates_numericality_of :pitch
        end
391

392 393
        # Old style
        guitar.errors["tuning_pegs.pitch"] = ["is not a number"]
394

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

398
    *Michael Probber*, *Terence Sun*
399

400 401 402 403
*   Exit with non-zero status for failed database rake tasks.

    *Jay Hayes*

404 405 406 407 408 409 410
*   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*

411
*   Add ability to default to `uuid` as primary key when generating database migrations.
412

413 414
    Example:

415 416 417
        config.generators do |g|
          g.orm :active_record, primary_key_type: :uuid
        end
418 419 420

    *Jon McCartie*

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

423
    Fixes #20817.
424 425 426

    *Hiroaki Izu*

427
*   Qualify column name inserted by `group` in calculation.
428 429 430 431 432 433

    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*

434 435 436 437 438
*   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*

439 440 441 442 443 444
*   Fix `rewhere` in a `has_many` association.

    Fixes #21955.

    *Josh Branchaud*, *Kal*

445 446 447 448 449 450
*   `where` raises ArgumentError on unsupported types.

    Fixes #20473.

    *Jake Worth*

451
*   Add an immutable string type to help reduce memory usage for apps which do
452
    not need mutation detection on strings.
453 454 455

    *Sean Griffin*

J
Jan 已提交
456
*   Give `ActiveRecord::Relation#update` its own deprecation warning when
457 458 459 460 461 462
    passed an `ActiveRecord::Base` instance.

    Fixes #21945.

    *Ted Johansson*

463 464 465 466 467 468 469
*   Make it possible to pass `:to_table` when adding a foreign key through
    `add_reference`.

    Fixes #21563.

    *Yves Senn*

A
Andrew White 已提交
470
*   No longer pass deprecated option `-i` to `pg_dump`.
471 472 473

    *Paul Sadauskas*

474 475
*   Concurrent `AR::Base#increment!` and `#decrement!` on the same record
    are all reflected in the database rather than overwriting each other.
476 477 478

    *Bogdan Gusiev*

479 480 481 482 483 484
*   Avoid leaking the first relation we call `first` on, per model.

    Fixes #21921.

    *Matthew Draper*, *Jean Boussier*

485
*   Remove unused `pk_and_sequence_for` in `AbstractMysqlAdapter`.
486 487 488

    *Ryuta Kamizono*

489
*   Allow fixtures files to set the model class in the YAML file itself.
490 491 492

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

493 494 495 496
        _fixture:
          model_class: User
        david:
          name: David
497 498 499 500 501

    Fixes #9516.

    *Roque Pinel*

502 503 504 505 506
*   Don't require a database connection to load a class which uses acceptance
    validations.

    *Sean Griffin*

507 508 509 510
*   Correctly apply `unscope` when preloading through associations.

    *Jimmy Bourassa*

511
*   Fixed taking precision into count when assigning a value to timestamp attribute.
512 513 514 515 516 517

    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.


518 519
        m = Model.create!
        m.created_at.usec == m.reload.created_at.usec # => false
520 521 522 523 524 525 526 527 528 529
        # 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*

530 531 532 533 534 535 536 537 538 539
*   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*

540
*   Add `ActiveRecord::Base.ignored_columns` to make some columns
541
    invisible from Active Record.
542 543 544

    *Jean Boussier*

545 546 547 548 549
*   `ActiveRecord::Tasks::MySQLDatabaseTasks` fails if shellout to
    mysql commands (like `mysqldump`) is not successful.

    *Steve Mitchell*

550 551
*   Ensure `select` quotes aliased attributes, even when using `from`.

552
    Fixes #21488.
553

554
    *Sean Griffin*, *@johanlunds*
555

556
*   MySQL: support `unsigned` numeric data types.
557 558 559 560

    Example:

        create_table :foos do |t|
561 562 563 564
          t.unsigned_integer :quantity
          t.unsigned_bigint  :total
          t.unsigned_float   :percentage
          t.unsigned_decimal :price, precision: 10, scale: 2
565 566
        end

567
    The `unsigned: true` option may be used for the primary key:
568

569 570 571 572 573 574
        create_table :foos, id: :bigint, unsigned: true do |t|

        end

    *Ryuta Kamizono*

575 576 577 578
*   Add `#views` and `#view_exists?` methods on connection adapters.

    *Ryuta Kamizono*

579 580 581 582 583 584 585 586 587 588 589
*   Correctly dump composite primary key.

    Example:

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

    *Ryuta Kamizono*

590 591 592 593 594
*   Lookup the attribute name for `restrict_with_error` messages on the
    model class that defines the association.

    *kuboon*, *Ronak Jangir*

595 596 597 598
*   Correct query for PostgreSQL 8.2 compatibility.

    *Ben Murphy*, *Matthew Draper*

599 600 601
*   `bin/rake db:migrate` uses
    `ActiveRecord::Tasks::DatabaseTasks.migrations_paths` instead of
    `Migrator.migrations_paths`.
602 603 604

    *Tobias Bielohlawek*

Y
Yves Senn 已提交
605
*   Support dropping indexes concurrently in PostgreSQL.
606 607 608 609 610 611

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

    *Grey Baker*

612
*   Deprecate passing conditions to `ActiveRecord::Relation#delete_all`
Y
Yves Senn 已提交
613
    and `ActiveRecord::Relation#destroy_all`.
614 615 616

    *Wojciech Wnętrzak*

617 618 619 620 621 622 623
*   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*

624 625 626 627 628 629 630 631 632 633 634 635
*   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*

636 637 638 639 640 641
*   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*

642 643 644 645 646 647
*   Only try to nullify has_one target association if the record is persisted.

    Fixes #21223.

    *Agis Anastasopoulos*

648 649 650
*   Uniqueness validator raises descriptive error when running on a persisted
    record without primary key.

Y
Yves Senn 已提交
651
    Fixes #21304.
652 653 654

    *Yves Senn*

655 656 657 658 659 660 661 662 663 664
*   Add a native JSON data type support in MySQL.

    Example:

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

    *Ryuta Kamizono*

665 666
*   Descriptive error message when fixtures contain a missing column.

Y
Yves Senn 已提交
667
    Fixes #21201.
668 669 670

    *Yves Senn*

671 672
*   `ActiveRecord::Tasks::PostgreSQLDatabaseTasks` fail if shellout to
    postgresql commands (like `pg_dump`) is not successful.
673

674 675
    *Bryan Paxton*, *Nate Berkopec*

676 677 678
*   Add `ActiveRecord::Relation#in_batches` to work with records and relations
    in batches.

679
    Available options are `of` (batch size), `load`, `start`, and `finish`.
680 681 682 683 684 685 686 687 688 689 690

    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 已提交
691
    Fixes #20933.
692 693 694

    *Sina Siadat*

Y
Yves Senn 已提交
695
*   Added methods for PostgreSQL geometric data types to use in migrations.
696 697 698 699 700 701 702 703 704 705 706 707 708 709

    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Ç*

710 711 712 713
*   Add `cache_key` to ActiveRecord::Relation.

    Example:

714 715 716
        @users = User.where("name like ?", "%Alberto%")
        @users.cache_key
        # => "/users/query-5942b155a43b139f2471b872ac54251f-3-20150714212107656125000"
717 718 719

    *Alberto Fernández-Capel*

720 721 722 723
*   Properly allow uniqueness validations on primary keys.

    Fixes #20966.

Y
Yves Senn 已提交
724
    *Sean Griffin*, *presskey*
725

726 727 728 729 730 731 732
*   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 已提交
733
*   `ActiveRecord::RecordNotFound` modified to store model name, primary_key and
734
    id of the caller model. It allows the catcher of this exception to make
Y
Yves Senn 已提交
735 736 737
    a better decision to what to do with it.

    Example:
738 739 740 741 742 743 744 745 746 747 748 749

        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*

750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765
*   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*

766 767 768 769 770 771 772 773 774 775 776 777 778 779
*   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*

780 781 782 783 784 785 786
*   Correctly ignore `mark_for_destruction` when `autosave` isn't set to `true`
    when validating associations.

    Fixes #20882.

    *Sean Griffin*

Y
Yves Senn 已提交
787
*   Fix a bug where counter_cache doesn't always work with polymorphic
788 789 790 791
    relations.

    Fixes #16407.

Y
Yves Senn 已提交
792
    *Stefan Kanev*, *Sean Griffin*
793

794 795 796 797 798 799 800
*   Ensure that cyclic associations with autosave don't cause duplicate errors
    to be added to the parent record.

    Fixes #20874.

    *Sean Griffin*

801 802 803 804 805 806 807
*   Ensure that `ActionController::Parameters` can still be passed to nested
    attributes.

    Fixes #20922.

    *Sean Griffin*

808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825
*   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*

826 827 828 829 830
*   Replaced `ActiveSupport::Concurrency::Latch` with `Concurrent::CountDownLatch`
    from the concurrent-ruby gem.

    *Jerry D'Antonio*

831 832 833 834 835 836 837 838
*   Fix through associations using scopes having the scope merged multiple
    times.

    Fixes #20721.
    Fixes #20727.

    *Sean Griffin*

839 840 841 842 843 844 845
*   `ActiveRecord::Base.dump_schema_after_migration` applies migration tasks
    other than `db:migrate`. (eg. `db:rollback`, `db:migrate:dup`, ...)

    Fixes #20743.

    *Yves Senn*

846 847 848 849 850 851 852 853
*   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 已提交
854
        change_column_default :users, :authorized, from: true, to: false
855 856 857

    *Prem Sichanugrist*

858 859 860 861 862 863 864
*   Prevent error when using `force_reload: true` on an unassigned polymorphic
    belongs_to association.

    Fixes #20426.

    *James Dabbs*

865 866
*   Correctly raise `ActiveRecord::AssociationTypeMismatch` when assigning
    a wrong type to a namespaced association.
867

868
    Fixes #20545.
869 870 871

    *Diego Carrion*

872 873 874 875 876 877
*   `validates_absence_of` respects `marked_for_destruction?`.

    Fixes #20449.

    *Yves Senn*

878 879
*   Include the `Enumerable` module in `ActiveRecord::Relation`

880
    *Sean Griffin*, *bogdan*
881

882 883 884 885
*   Use `Enumerable#sum` in `ActiveRecord::Relation` if a block is given.

    *Sean Griffin*

886
*   Let `WITH` queries (Common Table Expressions) be explainable.
887 888 889

    *Vladimir Kochnev*

890 891 892 893
*   Make `remove_index :table, :column` reversible.

    *Yves Senn*

894 895 896 897 898 899 900
*   Fixed an error which would occur in dirty checking when calling
    `update_attributes` from a getter.

    Fixes #20531.

    *Sean Griffin*

901 902
*   Make `remove_foreign_key` reversible. Any foreign key options must be
    specified, similar to `remove_column`.
903 904 905

    *Aster Ryan*

906
*   Add `:_prefix` and `:_suffix` options to `enum` definition.
907

908
    Fixes #17511, #17415.
909 910 911

    *Igor Kapkov*

912 913 914 915
*   Correctly handle decimal arrays with defaults in the schema dumper.

    Fixes #20515.

916
    *Sean Griffin*, *jmondo*
917

918
*   Deprecate the PostgreSQL `:point` type in favor of a new one which will return
919 920 921 922
    `Point` objects instead of an `Array`

    *Sean Griffin*

923 924 925 926 927 928 929
*   Ensure symbols passed to `ActiveRecord::Relation#select` are always treated
    as columns.

    Fixes #20360.

    *Sean Griffin*

930 931
*   Do not set `sql_mode` if `strict: :default` is specified.

Y
Yves Senn 已提交
932
        # config/database.yml
933 934 935 936 937 938 939 940
        production:
          adapter: mysql2
          database: foo_prod
          user: foo
          strict: :default

    *Ryuta Kamizono*

941 942 943
*   Allow proc defaults to be passed to the attributes API. See documentation
    for examples.

944
    *Sean Griffin*, *Kir Shatrov*
945

946 947 948 949 950 951 952 953 954 955 956 957 958 959 960
*   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 已提交
961 962 963 964 965 966 967 968 969
*   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*

970
*   Clear query cache when `ActiveRecord::Base#reload` is called.
971

972
    *Shane Hender, Pierre Nespo*
973

974 975 976 977
*   Include stored procedures and function on the MySQL structure dump.

    *Jonathan Worek*

978 979
*   Pass `:extend` option for `has_and_belongs_to_many` associations to the
    underlying `has_many :through`.
980 981 982

    *Jaehyun Shin*

983 984 985 986 987 988
*   Deprecate `Relation#uniq` use `Relation#distinct` instead.

    See #9683.

    *Yves Senn*

989 990
*   Allow single table inheritance instantiation to work when storing
    demodulized class names.
991 992 993

    *Alex Robbin*

994 995
*   Correctly pass MySQL options when using `structure_dump` or
    `structure_load`.
996 997 998 999 1000

    Specifically, it fixes an issue when using SSL authentication.

    *Alex Coomans*

1001 1002
*   Dump indexes in `create_table` instead of `add_index`.

1003
    If the adapter supports indexes in `create_table`, generated SQL is
1004 1005 1006 1007
    slightly more efficient.

    *Ryuta Kamizono*

1008 1009 1010 1011
*   Correctly dump `:options` on `create_table` for MySQL.

    *Ryuta Kamizono*

1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022
*   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*

1023 1024 1025 1026
*   Remove `ActiveRecord::Serialization::XmlSerializer` from core.

    *Zachary Scott*

1027 1028 1029 1030
*   Make `unscope` aware of "less than" and "greater than" conditions.

    *TAKAHASHI Kazuaki*

1031 1032 1033 1034 1035
*   `find_by` and `find_by!` raise `ArgumentError` when called without
    arguments.

    *Kohei Suzuki*

1036 1037 1038 1039 1040 1041 1042
*   Revert behavior of `db:schema:load` back to loading the full
    environment. This ensures that initializers are run.

    Fixes #19545.

    *Yves Senn*

1043 1044 1045 1046 1047 1048 1049 1050
*   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*

1051 1052 1053 1054 1055 1056
*   Rename `:class` to `:anonymous_class` in association options.

    Fixes #19659.

    *Andrew White*

1057 1058 1059 1060 1061 1062 1063
*   Autosave existing records on a has many through association when the parent
    is new.

    Fixes #19782.

    *Sean Griffin*

1064 1065
*   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.
1066 1067 1068

    *Andrey Voronkov*

1069
*   MySQL: `:charset` and `:collation` support for string and text columns.
1070 1071 1072 1073 1074 1075 1076 1077 1078 1079

    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*

1080 1081 1082 1083 1084 1085 1086
*   Foreign key related methods in the migration DSL respect
    `ActiveRecord::Base.pluralize_table_names = false`.

    Fixes #19643.

    *Mehmet Emin İNAÇ*

Y
Yves Senn 已提交
1087
*   Reduce memory usage from loading types on PostgreSQL.
1088 1089 1090 1091 1092

    Fixes #19578.

    *Sean Griffin*

Y
Yves Senn 已提交
1093
*   Add `config.active_record.warn_on_records_fetched_greater_than` option.
1094 1095

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

    Fixes #16463.
1099 1100 1101

    *Jason Nochlin*

Y
Yves Senn 已提交
1102
*   Ignore `.psqlrc` when loading database structure.
1103 1104 1105

    *Jason Weathered*

1106 1107
*   Fix referencing wrong table aliases while joining tables of has many through
    association (only when calling calculation methods).
1108

1109
    Fixes #19276.
1110 1111 1112

    *pinglamb*

1113 1114 1115 1116 1117 1118 1119
*   Correctly persist a serialized attribute that has been returned to
    its default value by an in-place modification.

    Fixes #19467.

    *Matthew Draper*

1120 1121 1122 1123 1124 1125 1126 1127
*   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*

1128 1129 1130 1131 1132
*   Reuse the `CollectionAssociation#reader` cache when the foreign key is
    available prior to save.

    *Ben Woosley*

1133 1134 1135 1136 1137 1138 1139
*   Add `config.active_record.dump_schemas` to fix `db:structure:dump`
    when using schema_search_path and PostgreSQL extensions.

    Fixes #17157.

    *Ryan Wallace*

1140 1141 1142 1143 1144 1145
*   Renaming `use_transactional_fixtures` to `use_transactional_tests` for clarity.

    Fixes #18864.

    *Brandon Weiss*

1146 1147 1148 1149 1150
*   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*

1151 1152 1153 1154
*   Correctly dump `serial` and `bigserial`.

    *Ryuta Kamizono*

1155 1156 1157 1158
*   Fix default `format` value in `ActiveRecord::Tasks::DatabaseTasks#schema_file`.

    *James Cox*

1159 1160
*   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.
1161 1162 1163 1164 1165

    Fixes #15549.

    *Will Bryant*, *Aaron Patterson*

1166 1167 1168 1169 1170 1171 1172
*   Correctly create through records when created on a has many through
    association when using `where`.

    Fixes #19073.

    *Sean Griffin*

1173
*   Add `SchemaMigration.create_table` support for any unicode charsets with MySQL.
1174 1175 1176

    *Ryuta Kamizono*

1177
*   PostgreSQL no longer disables user triggers if system triggers can't be
1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190
    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*

1191 1192
*   In PostgreSQL, print a warning message if `disable_referential_integrity`
    fails due to missing permissions.
1193 1194 1195

    *Andrey Nering*, *Yves Senn*

1196
*   Allow a `:limit` option for MySQL bigint primary key support.
1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210

    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*

1211 1212 1213 1214 1215 1216 1217
*   `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*

1218
*   Fixed `ActiveRecord::Relation#becomes!` and `changed_attributes` issues for type
1219
    columns.
1220 1221 1222 1223 1224

    Fixes #17139.

    *Miklos Fazekas*

1225 1226 1227 1228
*   Format the time string according to the precision of the time column.

    *Ryuta Kamizono*

1229
*   Allow a `:precision` option for time type columns.
1230 1231 1232

    *Ryuta Kamizono*

1233
*   Add `ActiveRecord::Base.suppress` to prevent the receiver from being saved
M
Michael Ryan 已提交
1234 1235 1236 1237 1238 1239
    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):

1240 1241 1242 1243 1244
        class Comment < ActiveRecord::Base
          belongs_to :commentable, polymorphic: true
          after_create -> { Notification.create! comment: self,
            recipients: commentable.recipients }
        end
M
Michael Ryan 已提交
1245

1246 1247 1248 1249
    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 已提交
1250

1251 1252 1253 1254 1255 1256 1257
        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 已提交
1258 1259 1260 1261
        end

    *Michael Ryan*

1262 1263
*   `:time` option added for `#touch`.

H
Hyonjee Joo 已提交
1264 1265 1266 1267
    Fixes #18905.

    *Hyonjee Joo*

1268
*   Deprecate passing of `start` value to `find_in_batches` and `find_each`
1269 1270 1271 1272
    in favour of `begin_at` value.

    *Vipul A M*

1273 1274 1275 1276
*   Add `foreign_key_exists?` method.

    *Tõnis Simo*

1277 1278 1279 1280
*   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`)
1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299

        # 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*

1300 1301 1302 1303 1304
*   Have `enum` perform type casting consistently with the rest of Active
    Record, such as `where`.

    *Sean Griffin*

1305
*   `scoping` no longer pollutes the current scope of sibling classes when using
1306 1307 1308 1309 1310
    STI.

    Fixes #18806.

    Example:
1311

1312 1313 1314
        StiOne.none.scoping do
          StiTwo.all
        end
1315 1316 1317 1318


    *Sean Griffin*

1319 1320 1321 1322 1323 1324 1325 1326
*   `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*

1327
*   `find_in_batches` now accepts an `:finish` parameter that complements the `:start`
1328 1329 1330 1331
     parameter to specify where to stop batch processing.

    *Vipul A M*

1332
*   Fix a rounding problem for PostgreSQL timestamp columns.
1333

1334 1335
    If a timestamp column has a precision specified, it needs to
    format according to that.
1336 1337 1338

    *Ryuta Kamizono*

1339 1340
*   Respect the database default charset for `schema_migrations` table.

1341
    The charset of `version` column in `schema_migrations` table depends
1342 1343 1344 1345 1346
    on the database default charset and collation rather than the encoding
    of the connection.

    *Ryuta Kamizono*

1347 1348
*   Raise `ArgumentError` when passing `nil` or `false` to `Relation#merge`.

1349
    These are not valid values to merge in a relation, so it should warn users
1350 1351 1352 1353
    early.

    *Rafael Mendonça França*

1354
*   Use `SCHEMA` instead of `DB_STRUCTURE` for specifying a structure file.
1355

1356
    This makes the `db:structure` tasks consistent with `test:load_structure`.
1357 1358 1359

    *Dieter Komendera*

1360 1361 1362 1363 1364 1365
*   Respect custom primary keys for associations when calling `Relation#where`

    Fixes #18813.

    *Sean Griffin*

1366
*   Fix several edge cases which could result in a counter cache updating
1367 1368 1369 1370 1371 1372
    twice or not updating at all for `has_many` and `has_many :through`.

    Fixes #10865.

    *Sean Griffin*

1373 1374 1375 1376 1377 1378 1379 1380 1381
*   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*

1382 1383 1384 1385 1386 1387 1388 1389 1390 1391
*   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.

1392
    *Eileen M. Uchitelle*, *Aaron Patterson*
1393

1394 1395 1396 1397
*   Fix n+1 query problem when eager loading nil associations (fixes #18312)

    *Sammy Larbi*

1398
*   Change the default error message from `can't be blank` to `must exist` for
1399 1400
    the presence validator of the `:required` option on `belongs_to`/`has_one`
    associations.
1401 1402 1403

    *Henrik Nygren*

1404 1405
*   Fixed `ActiveRecord::Relation#group` method when an argument is an SQL
    reserved keyword:
1406

Y
Yves Senn 已提交
1407 1408 1409 1410
    Example:

        SplitTest.group(:key).count
        Property.group(:value).count
1411 1412 1413

    *Bogdan Gusiev*

1414
*   Added the `#or` method on `ActiveRecord::Relation`, allowing use of the OR
1415 1416 1417 1418 1419 1420 1421 1422 1423
    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*

1424 1425 1426 1427 1428 1429 1430
*   Don't define autosave association callbacks twice from
    `accepts_nested_attributes_for`.

    Fixes #18704.

    *Sean Griffin*

1431 1432 1433 1434 1435 1436 1437 1438
*   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*

1439
*   Values which would error while being sent to the database (such as an
1440
    ASCII-8BIT string with invalid UTF-8 bytes on SQLite3), no longer error on
1441 1442 1443 1444 1445 1446 1447
    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*

1448 1449
*   Don't remove join dependencies in `Relation#exists?`

1450
    Fixes #18632.
1451 1452 1453

    *Sean Griffin*

1454 1455 1456 1457 1458 1459
*   Invalid values assigned to a JSON column are assumed to be `nil`.

    Fixes #18629.

    *Sean Griffin*

1460 1461 1462 1463 1464 1465
*   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*

1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480
*   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*

1481 1482 1483 1484
*   Don't run SQL if attribute value is not changed for update_attribute method.

    *Prathamesh Sonpatki*

1485
*   `time` columns can now get affected by `time_zone_aware_attributes`. If you have
1486
    set `config.time_zone` to a value other than `'UTC'`, they will be treated
1487
    as in that time zone by default in Rails 5.1. If this is not the desired
1488 1489 1490 1491 1492 1493 1494
    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 已提交
1495
    Fixes #3145.
1496 1497 1498

    *Sean Griffin*

1499 1500 1501 1502 1503 1504 1505 1506 1507
*   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*

1508 1509 1510 1511 1512
*   `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*

1513 1514 1515 1516 1517 1518 1519
*   `attribute_will_change!` will no longer cause non-persistable attributes to
    be sent to the database.

    Fixes #18407.

    *Sean Griffin*

1520 1521
*   Remove support for the `protected_attributes` gem.

1522
    *Carlos Antonio da Silva*, *Roberto Miranda*
1523

1524
*   Fix accessing of fixtures having non-string labels like Fixnum.
1525 1526 1527

    *Prathamesh Sonpatki*

1528
*   Remove deprecated support to preload instance-dependent associations.
1529 1530 1531

    *Yves Senn*

1532 1533 1534 1535
*   Remove deprecated support for PostgreSQL ranges with exclusive lower bounds.

    *Yves Senn*

1536
*   Remove deprecation when modifying a relation with cached Arel.
1537 1538 1539 1540
    This raises an `ImmutableRelation` error instead.

    *Yves Senn*

Y
Yves Senn 已提交
1541 1542
*   Added `ActiveRecord::SecureToken` in order to encapsulate generation of
    unique tokens for attributes in a model using `SecureRandom`.
1543 1544 1545

    *Roberto Miranda*

1546 1547 1548 1549 1550 1551 1552 1553 1554
*   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*

1555 1556 1557 1558
*   Deprecate `ActiveRecord::Base.errors_in_transactional_callbacks=`.

    *Rafael Mendonça França*

1559
*   Change transaction callbacks to not swallow errors.
1560

1561 1562
    Before this change any errors raised inside a transaction callback
    were getting rescued and printed in the logs.
1563

1564
    Now these errors are not rescued anymore and just bubble up, as the other callbacks.
1565 1566 1567

    *Rafael Mendonça França*

1568 1569 1570 1571
*   Remove deprecated `sanitize_sql_hash_for_conditions`.

    *Rafael Mendonça França*

1572 1573 1574 1575
*   Remove deprecated `Reflection#source_macro`.

    *Rafael Mendonça França*

1576 1577 1578 1579
*   Remove deprecated `symbolized_base_class` and `symbolized_sti_name`.

    *Rafael Mendonça França*

1580 1581 1582 1583
*   Remove deprecated `ActiveRecord::Base.disable_implicit_join_references=`.

    *Rafael Mendonça França*

1584
*   Remove deprecated access to connection specification using a string accessor.
1585 1586 1587 1588 1589

    Now all strings will be handled as a URL.

    *Rafael Mendonça França*

1590 1591 1592 1593
*   Change the default `null` value for `timestamps` to `false`.

    *Rafael Mendonça França*

1594 1595 1596 1597
*   Return an array of pools from `connection_pools`.

    *Rafael Mendonça França*

1598 1599 1600 1601
*   Return a null column from `column_for_attribute` when no column exists.

    *Rafael Mendonça França*

1602 1603 1604 1605
*   Remove deprecated `serialized_attributes`.

    *Rafael Mendonça França*

1606 1607 1608 1609
*   Remove deprecated automatic counter caches on `has_many :through`.

    *Rafael Mendonça França*

1610 1611 1612 1613
*   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)`.
1614
    In the past, returning `false` in an Active Record `before_` callback had the
1615 1616
    side effect of halting the callback chain.
    This is not recommended anymore and, depending on the value of the
1617
    `ActiveSupport.halt_callback_chains_on_return_false` option, will
1618
    either not work at all or display a deprecation warning.
1619 1620 1621

    *claudiob*

1622
*   Clear query cache on rollback.
Y
Yves Senn 已提交
1623

1624
    *Florian Weingarten*
Y
Yves Senn 已提交
1625

1626
*   Fix setting of foreign_key for through associations when building a new record.
1627 1628 1629 1630 1631

    Fixes #12698.

    *Ivan Antropov*

1632
*   Improve dumping of the primary key. If it is not a default primary key,
1633 1634 1635 1636 1637 1638
    correctly dump the type and options.

    Fixes #14169, #16599.

    *Ryuta Kamizono*

1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649
*   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*

1650
*   Allow a precision option for MySQL datetimes.
1651 1652 1653

    *Ryuta Kamizono*

1654
*   Fixed automatic `inverse_of` for models nested in a module.
1655 1656 1657

    *Andrew McCloud*

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

1661
    This change allows updating multiple records returned by
1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673
    `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*

1674 1675 1676 1677 1678 1679
*   Fix `reaping_frequency` option when the value is a string.

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

    *korbin*

1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692
*   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*

1693 1694 1695 1696 1697 1698 1699
*   Fix change detection problem for PostgreSQL bytea type and
    `ArgumentError: string contains null byte` exception with pg-0.18.

    Fixes #17680.

    *Lars Kanis*

1700 1701 1702 1703
*   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.
1704 1705 1706 1707 1708

    Fixes #18070.

    *arthurnn*

1709
*   `validates_size_of` / `validates_length_of` do not count records
1710 1711 1712 1713 1714 1715
    which are `marked_for_destruction?`.

    Fixes #7247.

    *Yves Senn*

1716 1717 1718 1719 1720 1721
*   Ensure `first!` and friends work on loaded associations.

    Fixes #18237.

    *Sean Griffin*

1722 1723
*   `eager_load` preserves readonly flag for associations.

Y
Yves Senn 已提交
1724
    Fixes #15853.
1725 1726 1727

    *Takashi Kokubun*

1728
*   Provide `:touch` option to `save()` to accommodate saving without updating
1729 1730
    timestamps.

1731
    Fixes #18202.
1732 1733 1734

    *Dan Olson*

1735
*   Provide a more helpful error message when an unsupported class is passed to
1736
    `serialize`.
1737

1738
    Fixes #18224.
1739 1740 1741

    *Sean Griffin*

1742 1743 1744 1745 1746 1747 1748 1749 1750
*   Add bigint primary key support for MySQL.

    Example:

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

    *Ryuta Kamizono*

1751
*   Support for any type of primary key.
R
Ryuta Kamizono 已提交
1752 1753 1754 1755 1756

    Fixes #14194.

    *Ryuta Kamizono*

1757 1758 1759 1760
*   Dump the default `nil` for PostgreSQL UUID primary key.

    *Ryuta Kamizono*

1761 1762 1763 1764 1765 1766
*   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*

1767 1768 1769 1770 1771
*   Don't raise when writing an attribute with an out-of-range datetime passed
    by the user.

    *Grey Baker*

1772 1773 1774 1775 1776
*   Replace deprecated `ActiveRecord::Tasks::DatabaseTasks#load_schema` with
    `ActiveRecord::Tasks::DatabaseTasks#load_schema_for`.

    *Yves Senn*

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

Y
Yves Senn 已提交
1780
    Fixes #18161.
1781 1782 1783

    *Daniel Fox*

1784 1785 1786 1787 1788 1789 1790
*   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*

1791 1792 1793 1794
*   `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 已提交
1795
    Fixes #17945.
1796 1797 1798

    *Yves Senn*

Y
Yves Senn 已提交
1799
*   Fix undesirable RangeError by `Type::Integer`. Add `Type::UnsignedInteger`.
1800 1801 1802

    *Ryuta Kamizono*

1803 1804 1805 1806
*   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.

1807
    *Ulisses Almeida*, *Kassio Borges*
1808

1809 1810 1811 1812 1813
*   Remove deprecated behavior allowing nested arrays to be passed as query
    values.

    *Melanie Gilman*

1814 1815 1816 1817 1818
*   Deprecate passing a class as a value in a query. Users should pass strings
    instead.

    *Melanie Gilman*

1819 1820 1821 1822 1823
*   `add_timestamps` and `remove_timestamps` now properly reversible with
    options.

    *Noam Gagliardi-Rabinovich*

1824 1825 1826 1827 1828 1829 1830
*   `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*

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