CHANGELOG.md 4.8 KB
Newer Older
1 2 3 4 5 6 7 8 9
*   Configuration item `config.filter_parameters` could also filter out sensitive value of database column when call `#inspect`.

    ```
    Rails.application.config.filter_parameters += [:credit_card_number]
    Account.last.insepct # => #<Account id: 123, credit_card_number: [FILTERED] ...>
    ```

    *Zhang Kang*

10 11 12 13 14 15
*   Deprecate `column_name_length`, `table_name_length`, `columns_per_table`,
    `indexes_per_table`, `columns_per_multicolumn_index`, `sql_query_length`,
    and `joins_per_query` methods in `DatabaseLimits`.

    *Ryuta Kamizono*

R
Ryuta Kamizono 已提交
16
*   `ActiveRecord::Base.configurations` now returns an object.
17

R
Ryuta Kamizono 已提交
18
    `ActiveRecord::Base.configurations` used to return a hash, but this
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
    is an inflexible data model. In order to improve multiple-database
    handling in Rails, we've changed this to return an object. Some methods
    are provided to make the object behave hash-like in order to ease the
    transition process. Since most applications don't manipulate the hash
    we've decided to add backwards-compatible functionality that will throw
    a deprecation warning if used, however calling `ActiveRecord::Base.configurations`
    will use the new version internally and externally.

    For example, the following database.yml...

    ```
    development:
      adapter: sqlite3
      database: db/development.sqlite3
    ```

    Used to become a hash:

    ```
    { "development" => { "adapter" => "sqlite3", "database" => "db/development.sqlite3" } }
    ```

    Is now converted into the following object:

    ```
    #<ActiveRecord::DatabaseConfigurations:0x00007fd1acbdf800 @configurations=[
      #<ActiveRecord::DatabaseConfigurations::HashConfig:0x00007fd1acbded10 @env_name="development",
        @spec_name="primary", @config={"adapter"=>"sqlite3", "database"=>"db/development.sqlite3"}>
      ]
    ```

    Iterating over the database configurations has also changed. Instead of
    calling hash methods on the `configurations` hash directly, a new method `configs_for` has
    been provided that allows you to select the correct configuration. `env_name` is a required
    argument, `spec_name` is optional as well as passing a block. These return an array of
    database config objects for the requested environment and specification name respectively.

    ```
    ActiveRecord::Base.configurations.configs_for("development")
    ActiveRecord::Base.configurations.configs_for("development", "primary")
    ```

    *Eileen M. Uchitelle*, *Aaron Patterson*

63 64 65 66 67 68 69 70 71 72
*   Add database configuration to disable advisory locks.

    ```
    production:
      adapter: postgresql
      advisory_locks: false
    ```

    *Guo Xiang*

73 74 75 76
*   SQLite3 adapter `alter_table` method restores foreign keys.

    *Yasuo Honda*

B
bogdanvlviv 已提交
77 78 79 80 81 82 83 84
*   Allow `:to_table` option to `invert_remove_foreign_key`.

    Example:

       remove_foreign_key :accounts, to_table: :owners

    *Nikolay Epifanov*, *Rich Chen*

85 86 87 88 89
*   Add environment & load_config dependency to `bin/rake db:seed` to enable
    seed load in environments without Rails and custom DB configuration

    *Tobias Bielohlawek*

90
*   Fix default value for mysql time types with specified precision.
91 92 93

    *Nikolay Kondratyev*

94 95 96 97
*   Fix `touch` option to behave consistently with `Persistence#touch` method.

    *Ryuta Kamizono*

98 99 100 101 102
*   Migrations raise when duplicate column definition.

    Fixes #33024.

    *Federico Martinez*
R
Ryuta Kamizono 已提交
103

104 105 106 107
*   Bump minimum SQLite version to 3.8

    *Yasuo Honda*

108
*   Fix parent record should not get saved with duplicate children records.
109

110
    Fixes #32940.
111 112 113

    *Santosh Wadghule*

114 115 116 117
*   Fix logic on disabling commit callbacks so they are not called unexpectedly when errors occur.

    *Brian Durand*

118 119 120 121 122
*   Ensure `Associations::CollectionAssociation#size` and `Associations::CollectionAssociation#empty?`
    use loaded association ids if present.

    *Graham Turner*

123 124 125 126
*   Add support to preload associations of polymorphic associations when not all the records have the requested associations.

    *Dana Sherson*

127 128 129 130 131 132 133 134
*   Add `touch_all` method to `ActiveRecord::Relation`.

    Example:

        Person.where(name: "David").touch_all(time: Time.new(2020, 5, 16, 0, 0, 0))

    *fatkodima*, *duggiefresh*

135
*   Add `ActiveRecord::Base.base_class?` predicate.
136 137 138

    *Bogdan Gusiev*

139
*   Add custom prefix/suffix options to `ActiveRecord::Store.store_accessor`.
140

141
    *Tan Huynh*, *Yukio Mizuta*
142

J
Jeremy Daer 已提交
143 144 145 146
*   Rails 6 requires Ruby 2.4.1 or newer.

    *Jeremy Daer*

147 148 149
*   Deprecate `update_attributes`/`!` in favor of `update`/`!`.

    *Eddie Lebow*
150

R
Ryuta Kamizono 已提交
151 152
*   Add `ActiveRecord::Base.create_or_find_by`/`!` to deal with the SELECT/INSERT race condition in
    `ActiveRecord::Base.find_or_create_by`/`!` by leaning on unique constraints in the database.
153 154

    *DHH*
155

156 157 158 159
*   Add `Relation#pick` as short-hand for single-value plucks.

    *DHH*

160

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