CHANGELOG.md 9.8 KB
Newer Older
1 2 3 4 5 6
*   `ActiveRecord::Base.no_touching` no longer triggers callbacks or start empty transactions.

    Fixes #14841.

    *Lucas Mazza*

7 8 9 10 11 12
*   Fix name collision with `Array#select!` with `Relation#select!`.

    Fixes #14752.

    *Earl St Sauver*

13 14 15 16 17 18 19 20 21
*   Fixed unexpected behavior for `has_many :through` associations going through a scoped `has_many`.

    If a `has_many` association is adjusted using a scope, and another `has_many :through`
    uses this association, then the scope adjustment is unexpectedly neglected.

    Fixes #14537.

    *Jan Habermann*

22 23 24 25
*   `@destroyed` should always be set to `false` when an object is duped.

    *Kuldeep Aggarwal*

26 27 28 29 30 31
*   Fixed has_many association to make it support irregular inflections.

    Fixes #8928.

    *arthurnn*, *Javier Goizueta*

32 33 34 35 36 37
*   Fixed a problem where count used with a grouping was not returning a Hash.

    Fixes #14721.

    *Eric Chahin*

38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
*   `sanitize_sql_like` helper method to escape a string for safe use in a SQL
    LIKE statement.

    Example:

        class Article
          def self.search(term)
            where("title LIKE ?", sanitize_sql_like(term))
          end
        end

        Article.search("20% _reduction_")
        # => Query looks like "... title LIKE '20\% \_reduction\_' ..."

    *Rob Gilson*, *Yves Senn*

54 55 56 57 58 59
*   Do not quote uuid default value on `change_column`.

    Fixes #14604.

    *Eric Chahin*

60 61 62 63 64 65 66 67 68 69 70 71 72
*   The comparison between `Relation` and `CollectionProxy` should be consistent.

    Example:

        author.posts == Post.where(author_id: author.id)
        # => true
        Post.where(author_id: author.id) == author.posts
        # => true

    Fixes #13506.

    *Lauro Caetano*

73 74 75 76 77 78 79 80 81 82 83 84 85 86
*   Calling `delete_all` on an unloaded `CollectionProxy` no longer
    generates a SQL statement containing each id of the collection:

    Before:

        DELETE FROM `model` WHERE `model`.`parent_id` = 1
        AND `model`.`id` IN (1, 2, 3...)

    After:

        DELETE FROM `model` WHERE `model`.`parent_id` = 1

    *Eileen M. Uchitelle*, *Aaron Patterson*

87 88 89 90 91 92 93
*   Fixed error for aggregate methods (`empty?`, `any?`, `count`) with `select`
    which created invalid SQL.

    Fixes #13648.

    *Simon Woker*

94 95 96 97 98 99
*   PostgreSQL adapter only warns once for every missing OID per connection.

    Fixes #14275.

    *Matthew Draper*, *Yves Senn*

100 101 102 103 104 105 106
*   PostgreSQL adapter automatically reloads it's type map when encountering
    unknown OIDs.

    Fixes #14678.

    *Matthew Draper*, *Yves Senn*

107
*   Fix insertion of records via `has_many :through` association with scope.
108

109
    Fixes #3548.
110 111 112

    *Ivan Antropov*

113 114 115 116 117 118
*   Auto-generate stable fixture UUIDs on PostgreSQL.

    Fixes: #11524

    *Roderick van Domburg*

E
Evan Whalen 已提交
119 120 121 122 123 124 125
*   Fixed a problem where an enum would overwrite values of another enum
    with the same name in an unrelated class.

    Fixes #14607.

    *Evan Whalen*

126 127 128 129 130 131
*   PostgreSQL and SQLite string columns no longer have a default limit of 255.

    Fixes #13435, #9153.

    *Vladimir Sazhin*, *Toms Mikoss*, *Yves Senn*

132 133 134 135 136 137
*   Make possible to have an association called `records`.

    Fixes #11645.

    *prathamesh-sonpatki*

138 139 140 141 142 143 144 145 146
*   `to_sql` on an association now matches the query that is actually executed, where it
    could previously have incorrectly accrued additional conditions (e.g. as a result of
    a previous query). CollectionProxy now always defers to the association scope's
    `arel` method so the (incorrect) inherited one should be entirely concealed.

    Fixes #14003.

    *Jefferson Lai*

147 148 149 150 151 152 153 154
*   Block a few default Class methods as scope name.

    For instance, this will raise:

        scope :public, -> { where(status: 1) }

    *arthurnn*

155 156 157 158 159 160
*   Fixed error when using `with_options` with lambda.

    Fixes #9805.

    *Lauro Caetano*

161
*   Switch `sqlite3:///` URLs (which were temporarily
162 163 164 165 166 167 168
    deprecated in 4.1) from relative to absolute.

    If you still want the previous interpretation, you should replace
    `sqlite3:///my/path` with `sqlite3:my/path`.

    *Matthew Draper*

D
Dmitry Lavrov 已提交
169 170 171 172 173 174 175 176
*   Treat blank UUID values as `nil`.

    Example:

        Sample.new(uuid_field: '') #=> <Sample id: nil, uuid_field: nil>

    *Dmitry Lavrov*

177 178 179 180
*   Enable support for materialized views on PostgreSQL >= 9.3.

    *Dave Lee*

181 182 183 184
*   The PostgreSQL adapter supports custom domains. Fixes #14305.

    *Yves Senn*

185 186 187 188 189 190 191 192
*   PostgreSQL `Column#type` is now determined through the corresponding OID.
    The column types stay the same except for enum columns. They no longer have
    `nil` as type but `enum`.

    See #7814.

    *Yves Senn*

193 194 195 196 197 198
*   Fixed error when specifying a non-empty default value on a PostgreSQL array column.

    Fixes #10613.

    *Luke Steensen*

199 200 201 202
*   Make possible to change `record_timestamps` inside Callbacks.

    *Tieg Zaharia*

203 204 205 206 207 208 209
*   Fixed error where .persisted? throws SystemStackError for an unsaved model with a
    custom primary key that didn't save due to validation error.

    Fixes #14393.

    *Chris Finne*

210 211 212 213 214 215
*   Introduce `validate` as an alias for `valid?`.

    This is more intuitive when you want to run validations but don't care about the return value.

    *Henrik Nyh*

216
*   Create indexes inline in CREATE TABLE for MySQL.
217 218 219

    This is important, because adding an index on a temporary table after it has been created
    would commit the transaction.
220 221 222

    It also allows creating and dropping indexed tables with fewer queries and fewer permissions
    required.
223 224 225 226 227 228 229 230

    Example:

        create_table :temp, temporary: true, as: "SELECT id, name, zip FROM a_really_complicated_query" do |t|
          t.index :zip
        end
        # => CREATE TEMPORARY TABLE temp (INDEX (zip)) AS SELECT id, name, zip FROM a_really_complicated_query

231
    *Cody Cutrer*, *Steve Rice*, *Rafael Mendonça Franca*
232

233 234 235 236 237 238
*   Save `has_one` association even if the record doesn't changed.

    Fixes #14407.

    *Rafael Mendonça França*

Y
Yves Senn 已提交
239 240
*   Use singular table name in generated migrations when
    `ActiveRecord::Base.pluralize_table_names` is `false`.
241 242 243 244 245

    Fixes #13426.

    *Kuldeep Aggarwal*

246
*   `touch` accepts many attributes to be touched at once.
247 248 249

    Example:

250 251
        # touches :signed_at, :sealed_at, and :updated_at/on attributes.
        Photo.last.touch(:signed_at, :sealed_at)
252

253 254
    *James Pinto*

255 256 257 258 259 260 261
*   `rake db:structure:dump` only dumps schema information if the schema
    migration table exists.

    Fixes #14217.

    *Yves Senn*

262 263 264 265 266 267 268 269
*   Reap connections that were checked out by now-dead threads, instead
    of waiting until they disconnect by themselves. Before this change,
    a suitably constructed series of short-lived threads could starve
    the connection pool, without ever having more than a couple alive at
    the same time.

    *Matthew Draper*

270 271 272 273 274
*   `pk_and_sequence_for` now ensures that only the pg_depend entries
    pointing to pg_class, and thus only sequence objects, are considered.

    *Josh Williams*

275 276 277 278 279 280
*   `where.not` adds `references` for `includes` like normal `where` calls do.

    Fixes #14406.

    *Yves Senn*

281 282
*   Extend fixture `$LABEL` replacement to allow string interpolation.

283 284 285 286 287 288 289 290
    Example:

        martin:
          email: $LABEL@email.com

        users(:martin).email # => martin@email.com

    *Eric Steele*
291

292 293 294 295 296 297
*   Add support for `Relation` be passed as parameter on `QueryCache#select_all`.

    Fixes #14361.

    *arthurnn*

298 299
*   Passing an Active Record object to `find` is now deprecated.  Call `.id`
    on the object first.
300

301 302
*   Passing an Active Record object to `find` or `exists?` is now deprecated.
    Call `.id` on the object first.
303

304
*   Only use BINARY for MySQL case sensitive uniqueness check when column has a case insensitive collation.
305 306 307

    *Ryuta Kamizono*

308
*   Support for MySQL 5.6 fractional seconds.
309 310 311

    *arthurnn*, *Tatsuhiko Miyagawa*

312 313 314 315 316
*   Support for Postgres `citext` data type enabling case-insensitive where
    values without needing to wrap in UPPER/LOWER sql functions.

    *Troy Kruthoff*, *Lachlan Sylvester*

317
*   Allow strings to specify the `#order` value.
318 319 320 321 322

    Example:

        Model.order(id: 'asc').to_sql == Model.order(id: :asc).to_sql

323
    *Marcelo Casiraghi*, *Robin Dupret*
324

325 326 327 328 329
*   Dynamically register PostgreSQL enum OIDs. This prevents "unknown OID"
    warnings on enum columns.

    *Dieter Komendera*

330 331 332 333 334 335 336
*   `includes` is able to detect the right preloading strategy when string
    joins are involved.

    Fixes #14109.

    *Aaron Patterson*, *Yves Senn*

337 338 339 340
*   Fixed error with validation with enum fields for records where the
    value for any enum attribute is always evaluated as 0 during
    uniqueness validation.

341
    Fixes #14172.
342 343 344

    *Vilius Luneckas* *Ahmed AbouElhamayed*

345 346 347 348 349
*   `before_add` callbacks are fired before the record is saved on
    `has_and_belongs_to_many` assocations *and* on `has_many :through`
    associations.  Before this change, `before_add` callbacks would be fired
    before the record was saved on `has_and_belongs_to_many` associations, but
    *not* on `has_many :through` associations.
350

351
    Fixes #14144.
352

353 354 355 356 357 358 359
*   Fixed STI classes not defining an attribute method if there is a
    conflicting private method defined on its ancestors.

    Fixes #11569.

    *Godfrey Chan*

360
*   Coerce strings when reading attributes. Fixes #10485.
361 362 363 364 365 366 367 368 369

    Example:

        book = Book.new(title: 12345)
        book.save!
        book.title # => "12345"

    *Yves Senn*

370 371 372 373 374 375 376 377 378 379 380
*   Deprecate half-baked support for PostgreSQL range values with excluding beginnings.
    We currently map PostgreSQL ranges to Ruby ranges. This conversion is not fully
    possible because the Ruby range does not support excluded beginnings.

    The current solution of incrementing the beginning is not correct and is now
    deprecated. For subtypes where we don't know how to increment (e.g. `#succ`
    is not defined) it will raise an ArgumentException for ranges with excluding
    beginnings.

    *Yves Senn*

381 382 383 384
*   Support for user created range types in PostgreSQL.

    *Yves Senn*

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