activerecord 4.2.0 → 5.0.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of activerecord might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +1537 -789
- data/MIT-LICENSE +2 -2
- data/README.rdoc +7 -8
- data/examples/performance.rb +2 -3
- data/examples/simple.rb +0 -1
- data/lib/active_record/aggregations.rb +37 -23
- data/lib/active_record/association_relation.rb +16 -3
- data/lib/active_record/associations/alias_tracker.rb +19 -16
- data/lib/active_record/associations/association.rb +23 -9
- data/lib/active_record/associations/association_scope.rb +74 -102
- data/lib/active_record/associations/belongs_to_association.rb +26 -29
- data/lib/active_record/associations/builder/association.rb +28 -34
- data/lib/active_record/associations/builder/belongs_to.rb +43 -18
- data/lib/active_record/associations/builder/collection_association.rb +12 -20
- data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +22 -15
- data/lib/active_record/associations/builder/has_many.rb +4 -4
- data/lib/active_record/associations/builder/has_one.rb +11 -6
- data/lib/active_record/associations/builder/singular_association.rb +3 -10
- data/lib/active_record/associations/collection_association.rb +61 -33
- data/lib/active_record/associations/collection_proxy.rb +81 -35
- data/lib/active_record/associations/foreign_association.rb +11 -0
- data/lib/active_record/associations/has_many_association.rb +21 -57
- data/lib/active_record/associations/has_many_through_association.rb +15 -45
- data/lib/active_record/associations/has_one_association.rb +13 -5
- data/lib/active_record/associations/join_dependency/join_association.rb +20 -8
- data/lib/active_record/associations/join_dependency.rb +37 -21
- data/lib/active_record/associations/preloader/association.rb +51 -53
- data/lib/active_record/associations/preloader/collection_association.rb +0 -6
- data/lib/active_record/associations/preloader/has_many_through.rb +1 -1
- data/lib/active_record/associations/preloader/has_one.rb +0 -8
- data/lib/active_record/associations/preloader/through_association.rb +27 -14
- data/lib/active_record/associations/preloader.rb +18 -8
- data/lib/active_record/associations/singular_association.rb +8 -8
- data/lib/active_record/associations/through_association.rb +22 -9
- data/lib/active_record/associations.rb +321 -212
- data/lib/active_record/attribute/user_provided_default.rb +28 -0
- data/lib/active_record/attribute.rb +79 -15
- data/lib/active_record/attribute_assignment.rb +20 -141
- data/lib/active_record/attribute_decorators.rb +6 -5
- data/lib/active_record/attribute_methods/before_type_cast.rb +6 -1
- data/lib/active_record/attribute_methods/dirty.rb +51 -81
- data/lib/active_record/attribute_methods/primary_key.rb +2 -2
- data/lib/active_record/attribute_methods/query.rb +2 -2
- data/lib/active_record/attribute_methods/read.rb +31 -59
- data/lib/active_record/attribute_methods/serialization.rb +13 -16
- data/lib/active_record/attribute_methods/time_zone_conversion.rb +65 -14
- data/lib/active_record/attribute_methods/write.rb +14 -38
- data/lib/active_record/attribute_methods.rb +70 -45
- data/lib/active_record/attribute_mutation_tracker.rb +70 -0
- data/lib/active_record/attribute_set/builder.rb +37 -15
- data/lib/active_record/attribute_set.rb +34 -3
- data/lib/active_record/attributes.rb +199 -73
- data/lib/active_record/autosave_association.rb +73 -25
- data/lib/active_record/base.rb +35 -27
- data/lib/active_record/callbacks.rb +39 -43
- data/lib/active_record/coders/json.rb +1 -1
- data/lib/active_record/coders/yaml_column.rb +20 -8
- data/lib/active_record/collection_cache_key.rb +40 -0
- data/lib/active_record/connection_adapters/abstract/connection_pool.rb +457 -181
- data/lib/active_record/connection_adapters/abstract/database_limits.rb +3 -3
- data/lib/active_record/connection_adapters/abstract/database_statements.rb +83 -59
- data/lib/active_record/connection_adapters/abstract/query_cache.rb +3 -3
- data/lib/active_record/connection_adapters/abstract/quoting.rb +74 -9
- data/lib/active_record/connection_adapters/abstract/savepoints.rb +4 -4
- data/lib/active_record/connection_adapters/abstract/schema_creation.rb +61 -39
- data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +246 -185
- data/lib/active_record/connection_adapters/abstract/schema_dumper.rb +72 -17
- data/lib/active_record/connection_adapters/abstract/schema_statements.rb +438 -136
- data/lib/active_record/connection_adapters/abstract/transaction.rb +53 -40
- data/lib/active_record/connection_adapters/abstract_adapter.rb +166 -66
- data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +429 -335
- data/lib/active_record/connection_adapters/column.rb +28 -43
- data/lib/active_record/connection_adapters/connection_specification.rb +15 -27
- data/lib/active_record/connection_adapters/determine_if_preparable_visitor.rb +22 -0
- data/lib/active_record/connection_adapters/mysql/column.rb +50 -0
- data/lib/active_record/connection_adapters/mysql/database_statements.rb +125 -0
- data/lib/active_record/connection_adapters/mysql/explain_pretty_printer.rb +70 -0
- data/lib/active_record/connection_adapters/mysql/quoting.rb +51 -0
- data/lib/active_record/connection_adapters/mysql/schema_creation.rb +67 -0
- data/lib/active_record/connection_adapters/mysql/schema_definitions.rb +93 -0
- data/lib/active_record/connection_adapters/mysql/schema_dumper.rb +54 -0
- data/lib/active_record/connection_adapters/mysql/type_metadata.rb +32 -0
- data/lib/active_record/connection_adapters/mysql2_adapter.rb +26 -177
- data/lib/active_record/connection_adapters/postgresql/column.rb +5 -10
- data/lib/active_record/connection_adapters/postgresql/database_statements.rb +11 -73
- data/lib/active_record/connection_adapters/postgresql/explain_pretty_printer.rb +42 -0
- data/lib/active_record/connection_adapters/postgresql/oid/array.rb +27 -56
- data/lib/active_record/connection_adapters/postgresql/oid/bit.rb +2 -2
- data/lib/active_record/connection_adapters/postgresql/oid/bytea.rb +2 -1
- data/lib/active_record/connection_adapters/postgresql/oid/cidr.rb +3 -1
- data/lib/active_record/connection_adapters/postgresql/oid/date_time.rb +7 -13
- data/lib/active_record/connection_adapters/postgresql/oid/enum.rb +3 -1
- data/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +3 -3
- data/lib/active_record/connection_adapters/postgresql/oid/json.rb +1 -26
- data/lib/active_record/connection_adapters/postgresql/oid/jsonb.rb +2 -2
- data/lib/active_record/connection_adapters/postgresql/oid/money.rb +0 -4
- data/lib/active_record/connection_adapters/postgresql/oid/point.rb +4 -4
- data/lib/active_record/connection_adapters/postgresql/oid/rails_5_1_point.rb +50 -0
- data/lib/active_record/connection_adapters/postgresql/oid/range.rb +31 -17
- data/lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb +17 -5
- data/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +2 -2
- data/lib/active_record/connection_adapters/postgresql/oid/vector.rb +1 -1
- data/lib/active_record/connection_adapters/postgresql/oid/xml.rb +1 -1
- data/lib/active_record/connection_adapters/postgresql/oid.rb +1 -6
- data/lib/active_record/connection_adapters/postgresql/quoting.rb +26 -18
- data/lib/active_record/connection_adapters/postgresql/referential_integrity.rb +29 -10
- data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +107 -79
- data/lib/active_record/connection_adapters/postgresql/schema_dumper.rb +47 -0
- data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +248 -154
- data/lib/active_record/connection_adapters/postgresql/type_metadata.rb +35 -0
- data/lib/active_record/connection_adapters/postgresql_adapter.rb +258 -170
- data/lib/active_record/connection_adapters/schema_cache.rb +36 -23
- data/lib/active_record/connection_adapters/sql_type_metadata.rb +32 -0
- data/lib/active_record/connection_adapters/sqlite3/explain_pretty_printer.rb +19 -0
- data/lib/active_record/connection_adapters/sqlite3/quoting.rb +48 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_creation.rb +22 -0
- data/lib/active_record/connection_adapters/sqlite3_adapter.rb +150 -209
- data/lib/active_record/connection_adapters/statement_pool.rb +31 -12
- data/lib/active_record/connection_handling.rb +38 -15
- data/lib/active_record/core.rb +109 -114
- data/lib/active_record/counter_cache.rb +14 -25
- data/lib/active_record/dynamic_matchers.rb +1 -20
- data/lib/active_record/enum.rb +115 -79
- data/lib/active_record/errors.rb +88 -48
- data/lib/active_record/explain_registry.rb +1 -1
- data/lib/active_record/explain_subscriber.rb +2 -2
- data/lib/active_record/fixture_set/file.rb +26 -5
- data/lib/active_record/fixtures.rb +84 -46
- data/lib/active_record/gem_version.rb +2 -2
- data/lib/active_record/inheritance.rb +32 -40
- data/lib/active_record/integration.rb +4 -4
- data/lib/active_record/internal_metadata.rb +56 -0
- data/lib/active_record/legacy_yaml_adapter.rb +46 -0
- data/lib/active_record/locale/en.yml +3 -2
- data/lib/active_record/locking/optimistic.rb +27 -25
- data/lib/active_record/locking/pessimistic.rb +1 -1
- data/lib/active_record/log_subscriber.rb +43 -21
- data/lib/active_record/migration/command_recorder.rb +59 -18
- data/lib/active_record/migration/compatibility.rb +126 -0
- data/lib/active_record/migration.rb +372 -114
- data/lib/active_record/model_schema.rb +128 -38
- data/lib/active_record/nested_attributes.rb +71 -32
- data/lib/active_record/no_touching.rb +1 -1
- data/lib/active_record/null_relation.rb +16 -8
- data/lib/active_record/persistence.rb +124 -80
- data/lib/active_record/query_cache.rb +15 -18
- data/lib/active_record/querying.rb +10 -9
- data/lib/active_record/railtie.rb +28 -19
- data/lib/active_record/railties/controller_runtime.rb +1 -1
- data/lib/active_record/railties/databases.rake +67 -51
- data/lib/active_record/readonly_attributes.rb +1 -1
- data/lib/active_record/reflection.rb +318 -139
- data/lib/active_record/relation/batches/batch_enumerator.rb +67 -0
- data/lib/active_record/relation/batches.rb +139 -34
- data/lib/active_record/relation/calculations.rb +80 -102
- data/lib/active_record/relation/delegation.rb +7 -20
- data/lib/active_record/relation/finder_methods.rb +167 -97
- data/lib/active_record/relation/from_clause.rb +32 -0
- data/lib/active_record/relation/merger.rb +38 -41
- data/lib/active_record/relation/predicate_builder/array_handler.rb +12 -16
- data/lib/active_record/relation/predicate_builder/association_query_handler.rb +88 -0
- data/lib/active_record/relation/predicate_builder/base_handler.rb +17 -0
- data/lib/active_record/relation/predicate_builder/basic_object_handler.rb +17 -0
- data/lib/active_record/relation/predicate_builder/class_handler.rb +27 -0
- data/lib/active_record/relation/predicate_builder/polymorphic_array_handler.rb +57 -0
- data/lib/active_record/relation/predicate_builder/range_handler.rb +33 -0
- data/lib/active_record/relation/predicate_builder/relation_handler.rb +1 -1
- data/lib/active_record/relation/predicate_builder.rb +124 -82
- data/lib/active_record/relation/query_attribute.rb +19 -0
- data/lib/active_record/relation/query_methods.rb +323 -257
- data/lib/active_record/relation/record_fetch_warning.rb +49 -0
- data/lib/active_record/relation/spawn_methods.rb +11 -10
- data/lib/active_record/relation/where_clause.rb +174 -0
- data/lib/active_record/relation/where_clause_factory.rb +38 -0
- data/lib/active_record/relation.rb +176 -115
- data/lib/active_record/result.rb +4 -3
- data/lib/active_record/runtime_registry.rb +1 -1
- data/lib/active_record/sanitization.rb +95 -66
- data/lib/active_record/schema.rb +26 -22
- data/lib/active_record/schema_dumper.rb +62 -38
- data/lib/active_record/schema_migration.rb +11 -17
- data/lib/active_record/scoping/default.rb +24 -9
- data/lib/active_record/scoping/named.rb +49 -28
- data/lib/active_record/scoping.rb +32 -15
- data/lib/active_record/secure_token.rb +38 -0
- data/lib/active_record/serialization.rb +2 -4
- data/lib/active_record/statement_cache.rb +16 -14
- data/lib/active_record/store.rb +8 -3
- data/lib/active_record/suppressor.rb +58 -0
- data/lib/active_record/table_metadata.rb +68 -0
- data/lib/active_record/tasks/database_tasks.rb +59 -42
- data/lib/active_record/tasks/mysql_database_tasks.rb +32 -26
- data/lib/active_record/tasks/postgresql_database_tasks.rb +29 -9
- data/lib/active_record/tasks/sqlite_database_tasks.rb +5 -1
- data/lib/active_record/timestamp.rb +20 -9
- data/lib/active_record/touch_later.rb +58 -0
- data/lib/active_record/transactions.rb +159 -67
- data/lib/active_record/type/adapter_specific_registry.rb +130 -0
- data/lib/active_record/type/date.rb +2 -41
- data/lib/active_record/type/date_time.rb +2 -38
- data/lib/active_record/type/hash_lookup_type_map.rb +8 -2
- data/lib/active_record/type/internal/abstract_json.rb +29 -0
- data/lib/active_record/type/internal/timezone.rb +15 -0
- data/lib/active_record/type/serialized.rb +21 -14
- data/lib/active_record/type/time.rb +10 -16
- data/lib/active_record/type/type_map.rb +4 -4
- data/lib/active_record/type.rb +66 -17
- data/lib/active_record/type_caster/connection.rb +29 -0
- data/lib/active_record/type_caster/map.rb +19 -0
- data/lib/active_record/type_caster.rb +7 -0
- data/lib/active_record/validations/absence.rb +23 -0
- data/lib/active_record/validations/associated.rb +10 -3
- data/lib/active_record/validations/length.rb +24 -0
- data/lib/active_record/validations/presence.rb +11 -12
- data/lib/active_record/validations/uniqueness.rb +29 -18
- data/lib/active_record/validations.rb +33 -32
- data/lib/active_record.rb +9 -2
- data/lib/rails/generators/active_record/migration/migration_generator.rb +7 -4
- data/lib/rails/generators/active_record/migration/templates/create_table_migration.rb +8 -6
- data/lib/rails/generators/active_record/migration/templates/migration.rb +8 -7
- data/lib/rails/generators/active_record/migration.rb +7 -0
- data/lib/rails/generators/active_record/model/model_generator.rb +32 -15
- data/lib/rails/generators/active_record/model/templates/application_record.rb +5 -0
- data/lib/rails/generators/active_record/model/templates/model.rb +3 -0
- metadata +60 -34
- data/lib/active_record/connection_adapters/mysql_adapter.rb +0 -491
- data/lib/active_record/connection_adapters/postgresql/array_parser.rb +0 -93
- data/lib/active_record/connection_adapters/postgresql/oid/date.rb +0 -11
- data/lib/active_record/connection_adapters/postgresql/oid/float.rb +0 -21
- data/lib/active_record/connection_adapters/postgresql/oid/infinity.rb +0 -13
- data/lib/active_record/connection_adapters/postgresql/oid/integer.rb +0 -11
- data/lib/active_record/connection_adapters/postgresql/oid/time.rb +0 -11
- data/lib/active_record/serializers/xml_serializer.rb +0 -193
- data/lib/active_record/type/big_integer.rb +0 -13
- data/lib/active_record/type/binary.rb +0 -50
- data/lib/active_record/type/boolean.rb +0 -30
- data/lib/active_record/type/decimal.rb +0 -40
- data/lib/active_record/type/decimal_without_scale.rb +0 -11
- data/lib/active_record/type/decorator.rb +0 -14
- data/lib/active_record/type/float.rb +0 -19
- data/lib/active_record/type/integer.rb +0 -55
- data/lib/active_record/type/mutable.rb +0 -16
- data/lib/active_record/type/numeric.rb +0 -36
- data/lib/active_record/type/string.rb +0 -36
- data/lib/active_record/type/text.rb +0 -11
- data/lib/active_record/type/time_value.rb +0 -38
- data/lib/active_record/type/unsigned_integer.rb +0 -15
- data/lib/active_record/type/value.rb +0 -101
data/CHANGELOG.md
CHANGED
@@ -1,1372 +1,2120 @@
|
|
1
|
-
|
2
|
-
will recreate tables even if they have dependent objects (like foreign keys).
|
3
|
-
`db/schema.rb` now uses `force: :cascade`. This makes it possible to
|
4
|
-
reload the schema when foreign keys are in place.
|
1
|
+
## Rails 5.0.0 (June 30, 2016) ##
|
5
2
|
|
6
|
-
|
3
|
+
* Ensure hashes can be assigned to attributes created using `composed_of`.
|
4
|
+
Fixes #25210.
|
7
5
|
|
8
|
-
*
|
9
|
-
before loading the schema. This is left for the user to do.
|
10
|
-
`db:test:prepare` will still purge the database.
|
6
|
+
*Sean Griffin*
|
11
7
|
|
12
|
-
|
8
|
+
* Fix logging edge case where if an attribute was of the binary type and
|
9
|
+
was provided as a Hash.
|
13
10
|
|
14
|
-
*
|
11
|
+
*Jon Moss*
|
15
12
|
|
16
|
-
*
|
13
|
+
* Handle JSON deserialization correctly if the column default from database
|
14
|
+
adapter returns `''` instead of `nil`.
|
17
15
|
|
18
|
-
*
|
16
|
+
*Johannes Opper*
|
19
17
|
|
20
|
-
*
|
18
|
+
* PostgreSQL: Support Expression Indexes and Operator Classes.
|
21
19
|
|
22
|
-
|
20
|
+
Example:
|
23
21
|
|
24
|
-
|
22
|
+
create_table :users do |t|
|
23
|
+
t.string :name
|
24
|
+
t.index 'lower(name) varchar_pattern_ops'
|
25
|
+
end
|
25
26
|
|
26
|
-
|
27
|
-
options.
|
27
|
+
Fixes #19090, #21765, #21819, #24359.
|
28
28
|
|
29
|
-
*
|
29
|
+
*Ryuta Kamizono*
|
30
30
|
|
31
|
-
*
|
31
|
+
* MySQL: Prepared statements support.
|
32
32
|
|
33
|
-
|
34
|
-
|
33
|
+
To enable, set `prepared_statements: true` in config/database.yml.
|
34
|
+
Requires mysql2 0.4.4+.
|
35
35
|
|
36
|
-
|
37
|
-
to synchronize the schema. Plugins can use this task as a hook to
|
38
|
-
provide custom behavior after the schema has been loaded.
|
36
|
+
*Ryuta Kamizono*
|
39
37
|
|
40
|
-
|
38
|
+
* Schema dumper: Indexes are now included in the `create_table` block
|
39
|
+
instead of listed afterward as separate `add_index` lines.
|
41
40
|
|
42
|
-
|
41
|
+
This tidies up schema.rb and makes it easy to read as a list of tables.
|
43
42
|
|
44
|
-
|
43
|
+
Bonus: Allows databases that support it (MySQL) to perform as single
|
44
|
+
`CREATE TABLE` query, no additional query per index.
|
45
45
|
|
46
|
-
*
|
46
|
+
*Ryuta Kamizono*
|
47
47
|
|
48
|
-
|
48
|
+
* SQLite: Fix uniqueness validation when values exceed the column limit.
|
49
49
|
|
50
|
-
|
50
|
+
SQLite doesn't impose length restrictions on strings, BLOBs, or numeric
|
51
|
+
values. It treats them as helpful metadata. When we truncate strings
|
52
|
+
before checking uniqueness, we'd miss values that exceed the column limit.
|
51
53
|
|
52
|
-
|
54
|
+
Other databases enforce length limits. A large value will pass uniqueness
|
55
|
+
validation since the column limit guarantees no value that long exists.
|
56
|
+
When we insert the row, it'll raise `ActiveRecord::ValueTooLong` as we
|
57
|
+
expect.
|
53
58
|
|
54
|
-
|
59
|
+
This fixes edge-case incorrect validation failures for values that exceed
|
60
|
+
the column limit but are identical to an existing value *when truncated*.
|
61
|
+
Now these will pass validation and raise an exception.
|
55
62
|
|
56
|
-
*
|
63
|
+
*Ryuta Kamizono*
|
57
64
|
|
58
|
-
*
|
65
|
+
* Raise `ActiveRecord::ValueTooLong` when column limits are exceeded.
|
66
|
+
Supported by MySQL and PostgreSQL adapters.
|
59
67
|
|
60
|
-
*
|
68
|
+
*Ryuta Kamizono*
|
69
|
+
|
70
|
+
* Migrations: `#foreign_key` respects `table_name_prefix` and `_suffix`.
|
61
71
|
|
62
|
-
*
|
63
|
-
conditions on the joined association.
|
72
|
+
*Ryuta Kamizono*
|
64
73
|
|
65
|
-
|
74
|
+
* SQLite: Force NOT NULL primary keys.
|
66
75
|
|
67
|
-
|
76
|
+
From SQLite docs: https://www.sqlite.org/lang_createtable.html
|
77
|
+
According to the SQL standard, PRIMARY KEY should always imply NOT
|
78
|
+
NULL. Unfortunately, due to a bug in some early versions, this is not
|
79
|
+
the case in SQLite. Unless the column is an INTEGER PRIMARY KEY or the
|
80
|
+
table is a WITHOUT ROWID table or the column is declared NOT NULL,
|
81
|
+
SQLite allows NULL values in a PRIMARY KEY column. SQLite could be
|
82
|
+
fixed to conform to the standard, but doing so might break legacy
|
83
|
+
applications. Hence, it has been decided to merely document the fact
|
84
|
+
that SQLite allowing NULLs in most PRIMARY KEY columns.
|
68
85
|
|
69
|
-
|
86
|
+
Now we override column options to explicitly set NOT NULL rather than rely
|
87
|
+
on implicit NOT NULL like MySQL and PostgreSQL adapters.
|
70
88
|
|
71
|
-
*
|
72
|
-
the owner has been saved so that the proxy is not cached without the
|
73
|
-
owner's id.
|
89
|
+
*Ryuta Kamizono*
|
74
90
|
|
75
|
-
|
91
|
+
* Added notice when a database is successfully created or dropped.
|
76
92
|
|
77
|
-
|
93
|
+
Example:
|
78
94
|
|
79
|
-
|
95
|
+
$ bin/rails db:create
|
96
|
+
Created database 'blog_development'
|
97
|
+
Created database 'blog_test'
|
80
98
|
|
81
|
-
|
99
|
+
$ bin/rails db:drop
|
100
|
+
Dropped database 'blog_development'
|
101
|
+
Dropped database 'blog_test'
|
82
102
|
|
83
|
-
|
103
|
+
Changed older notices
|
104
|
+
`blog_development already exists` to `Database 'blog_development' already exists`.
|
105
|
+
and
|
106
|
+
`Couldn't drop blog_development` to `Couldn't drop database 'blog_development'`.
|
84
107
|
|
85
|
-
*
|
108
|
+
*bogdanvlviv*
|
86
109
|
|
87
|
-
*
|
110
|
+
* Database comments. Annotate database objects (tables, columns, indexes)
|
111
|
+
with comments stored in database metadata. PostgreSQL & MySQL support.
|
88
112
|
|
89
|
-
|
113
|
+
create_table :pages, force: :cascade, comment: 'CMS content pages' do |t|
|
114
|
+
t.string :path, comment: 'Path fragment of page URL used for routing'
|
115
|
+
t.string :locale, comment: 'RFC 3066 locale code of website language section'
|
116
|
+
t.index [:path, :locale], comment: 'Look up pages by URI'
|
117
|
+
end
|
90
118
|
|
91
|
-
*
|
92
|
-
`Relation` for performing queries and updates is the prefered API.
|
119
|
+
*Andrey Novikov*
|
93
120
|
|
94
|
-
|
121
|
+
* Add `quoted_time` for truncating the date part of a TIME column value.
|
122
|
+
This fixes queries on TIME column on MariaDB, as it doesn't ignore the
|
123
|
+
date part of the string when it coerces to time.
|
95
124
|
|
96
|
-
*
|
97
|
-
even when using type decorators such as `serialize`.
|
125
|
+
*Ryuta Kamizono*
|
98
126
|
|
99
|
-
|
127
|
+
* Properly accept all valid JSON primitives in the JSON data type.
|
100
128
|
|
101
|
-
|
102
|
-
in an endless loop.
|
129
|
+
Fixes #24234
|
103
130
|
|
104
|
-
|
131
|
+
*Sean Griffin*
|
105
132
|
|
106
|
-
|
133
|
+
* MariaDB 5.3+ supports microsecond datetime precision.
|
107
134
|
|
108
|
-
*
|
135
|
+
*Jeremy Daer*
|
109
136
|
|
110
|
-
|
137
|
+
* Delegate `none?` and `one?`. Now they can be invoked as model class methods.
|
111
138
|
|
112
|
-
|
139
|
+
Example:
|
113
140
|
|
114
|
-
|
141
|
+
# When no record is found on the table
|
142
|
+
Topic.none? # => true
|
115
143
|
|
116
|
-
|
144
|
+
# When only one record is found on the table
|
145
|
+
Topic.one? # => true
|
117
146
|
|
118
|
-
*
|
147
|
+
*Kenta Shirai*
|
119
148
|
|
120
|
-
*
|
149
|
+
* The form builder now properly displays values when passing a proc form
|
150
|
+
default to the attributes API.
|
121
151
|
|
122
|
-
|
123
|
-
# => ActiveRecord::UnknownAttributeError: unknown attribute 'name' for User.
|
152
|
+
Fixes #24249.
|
124
153
|
|
125
|
-
*
|
154
|
+
*Sean Griffin*
|
126
155
|
|
127
|
-
*
|
128
|
-
records are autosaved.
|
156
|
+
* The schema cache is now cleared after the `db:migrate` task is run.
|
129
157
|
|
130
|
-
|
158
|
+
Closes #24273.
|
131
159
|
|
132
|
-
*
|
160
|
+
*Chris Arcand*
|
133
161
|
|
134
|
-
*
|
135
|
-
|
162
|
+
* MySQL: strict mode respects other SQL modes rather than overwriting them.
|
163
|
+
Setting `strict: true` adds `STRICT_ALL_TABLES` to `sql_mode`. Setting
|
164
|
+
`strict: false` removes `STRICT_TRANS_TABLES`, `STRICT_ALL_TABLES`, and
|
165
|
+
`TRADITIONAL` from `sql_mode`.
|
136
166
|
|
137
|
-
*
|
167
|
+
*Ryuta Kamizono*
|
138
168
|
|
139
|
-
*
|
169
|
+
* Execute default_scope defined by abstract class in the context of subclass.
|
140
170
|
|
141
|
-
|
171
|
+
Fixes #23413.
|
172
|
+
Fixes #10658.
|
142
173
|
|
143
|
-
*
|
174
|
+
*Mehmet Emin İNAÇ*
|
144
175
|
|
145
|
-
|
176
|
+
* Fix an issue when preloading associations with extensions.
|
177
|
+
Previously every association with extension methods was transformed into an
|
178
|
+
instance dependent scope. This is no longer the case.
|
146
179
|
|
147
|
-
|
180
|
+
Fixes #23934.
|
148
181
|
|
149
182
|
*Yves Senn*
|
150
183
|
|
151
|
-
*
|
152
|
-
|
184
|
+
* Deprecate `{insert|update|delete}_sql` in `DatabaseStatements`.
|
185
|
+
Use the `{insert|update|delete}` public methods instead.
|
153
186
|
|
154
|
-
|
187
|
+
*Ryuta Kamizono*
|
155
188
|
|
156
|
-
|
189
|
+
* Added a configuration option to have active record raise an ArgumentError
|
190
|
+
if the order or limit is ignored in a batch query, rather than logging a
|
191
|
+
warning message.
|
157
192
|
|
158
|
-
*
|
159
|
-
committing it during the stack unwind. Previously, we could commit half-
|
160
|
-
completed work. This fix only works for Ruby 2.0+; on 1.9, we can't
|
161
|
-
distinguish a thread kill from an ordinary non-local (block) return, so must
|
162
|
-
default to committing.
|
193
|
+
*Scott Ringwelski*
|
163
194
|
|
164
|
-
|
195
|
+
* Honour the order of the joining model in a `has_many :through` association when eager loading.
|
165
196
|
|
166
|
-
|
167
|
-
`Comment.where(post_id: Post.none)` returned a non-empty result.
|
197
|
+
Example:
|
168
198
|
|
169
|
-
|
199
|
+
The below will now follow the order of `by_lines` when eager loading `authors`.
|
170
200
|
|
171
|
-
|
201
|
+
class Article < ActiveRecord::Base
|
202
|
+
has_many :by_lines, -> { order(:position) }
|
203
|
+
has_many :authors, through: :by_lines
|
204
|
+
end
|
172
205
|
|
173
|
-
|
174
|
-
in the future without affecting old migrations that assumed old defaults.
|
206
|
+
Fixes #17864.
|
175
207
|
|
176
|
-
*
|
208
|
+
*Yasyf Mohamedali*, *Joel Turkel*
|
177
209
|
|
178
|
-
*
|
210
|
+
* Ensure that the Suppressor runs before validations.
|
179
211
|
|
180
|
-
|
212
|
+
This moves the suppressor up to be run before validations rather than after
|
213
|
+
validations. There's no reason to validate a record you aren't planning on saving.
|
181
214
|
|
182
|
-
*
|
215
|
+
*Eileen M. Uchitelle*
|
183
216
|
|
184
|
-
|
217
|
+
* Save many-to-many objects based on association primary key.
|
185
218
|
|
186
|
-
|
219
|
+
Fixes #20995.
|
187
220
|
|
188
|
-
*
|
221
|
+
*himesh-r*
|
189
222
|
|
190
|
-
*
|
191
|
-
|
223
|
+
* Ensure that mutations of the array returned from `ActiveRecord::Relation#to_a`
|
224
|
+
do not affect the original relation, by returning a duplicate array each time.
|
192
225
|
|
193
|
-
|
226
|
+
This brings the behavior in line with `CollectionProxy#to_a`, which was
|
227
|
+
already more careful.
|
194
228
|
|
195
|
-
*
|
229
|
+
*Matthew Draper*
|
196
230
|
|
197
|
-
|
231
|
+
* Fixed `where` for polymorphic associations when passed an array containing different types.
|
198
232
|
|
199
|
-
|
233
|
+
Fixes #17011.
|
200
234
|
|
201
|
-
|
202
|
-
the database connection to the current environment.
|
235
|
+
Example:
|
203
236
|
|
204
|
-
|
237
|
+
PriceEstimate.where(estimate_of: [Treasure.find(1), Car.find(2)])
|
238
|
+
# => SELECT "price_estimates".* FROM "price_estimates"
|
239
|
+
WHERE (("price_estimates"."estimate_of_type" = 'Treasure' AND "price_estimates"."estimate_of_id" = 1)
|
240
|
+
OR ("price_estimates"."estimate_of_type" = 'Car' AND "price_estimates"."estimate_of_id" = 2))
|
205
241
|
|
206
|
-
*
|
242
|
+
*Philippe Huibonhoa*
|
207
243
|
|
208
|
-
*
|
244
|
+
* Fix a bug where using `t.foreign_key` twice with the same `to_table` within
|
245
|
+
the same table definition would only create one foreign key.
|
209
246
|
|
210
|
-
|
211
|
-
database.yml. Otherwise, `SET NAMES utf8mb4` will use the default
|
212
|
-
collation for that charset (utf8mb4_general_ci) when you may have chosen
|
213
|
-
a different collation, like utf8mb4_unicode_ci.
|
247
|
+
*George Millo*
|
214
248
|
|
215
|
-
|
216
|
-
|
249
|
+
* Fix a regression on has many association, where calling a child from parent in child's callback
|
250
|
+
results in same child records getting added repeatedly to target.
|
217
251
|
|
218
|
-
|
252
|
+
Fixes #13387.
|
219
253
|
|
220
|
-
*
|
254
|
+
*Bogdan Gusiev*, *Jon Hinson*
|
221
255
|
|
222
|
-
|
256
|
+
* Rework `ActiveRecord::Relation#last`.
|
223
257
|
|
224
|
-
|
225
|
-
|
258
|
+
1. Never perform additional SQL on loaded relation
|
259
|
+
2. Use SQL reverse order instead of loading relation if relation doesn't have limit
|
260
|
+
3. Deprecated relation loading when SQL order can not be automatically reversed
|
226
261
|
|
227
|
-
|
262
|
+
Topic.order("title").load.last(3)
|
263
|
+
# before: SELECT ...
|
264
|
+
# after: No SQL
|
228
265
|
|
229
|
-
|
266
|
+
Topic.order("title").last
|
267
|
+
# before: SELECT * FROM `topics`
|
268
|
+
# after: SELECT * FROM `topics` ORDER BY `topics`.`title` DESC LIMIT 1
|
230
269
|
|
231
|
-
|
232
|
-
|
270
|
+
Topic.order("coalesce(author, title)").last
|
271
|
+
# before: SELECT * FROM `topics`
|
272
|
+
# after: Deprecation Warning for irreversible order
|
233
273
|
|
234
|
-
|
274
|
+
*Bogdan Gusiev*
|
235
275
|
|
236
|
-
|
276
|
+
* Allow `joins` to be unscoped.
|
237
277
|
|
238
|
-
|
278
|
+
Fixes #13775.
|
239
279
|
|
240
|
-
|
280
|
+
*Takashi Kokubun*
|
241
281
|
|
242
|
-
|
282
|
+
* Add ActiveRecord `#second_to_last` and `#third_to_last` methods.
|
243
283
|
|
244
|
-
*
|
245
|
-
`after_rollback`/`after_create` callbacks and prints them to the logs.
|
246
|
-
Future versions of Rails will not rescue these errors anymore and
|
247
|
-
just bubble them up like the other callbacks.
|
284
|
+
*Brian Christian*
|
248
285
|
|
249
|
-
|
286
|
+
* Added `numeric` helper into migrations.
|
250
287
|
|
251
288
|
Example:
|
252
289
|
|
253
|
-
|
254
|
-
|
290
|
+
create_table(:numeric_types) do |t|
|
291
|
+
t.numeric :numeric_type, precision: 10, scale: 2
|
292
|
+
end
|
255
293
|
|
256
|
-
|
294
|
+
*Mehmet Emin İNAÇ*
|
257
295
|
|
258
|
-
|
296
|
+
* Bumped the minimum supported version of PostgreSQL to >= 9.1.
|
297
|
+
Both PG 9.0 and 8.4 are past their end of life date:
|
298
|
+
http://www.postgresql.org/support/versioning/
|
259
299
|
|
260
|
-
*
|
261
|
-
`enum`) with the same name as a global method are incorrectly overridden
|
262
|
-
when subclassing.
|
300
|
+
*Remo Mueller*
|
263
301
|
|
264
|
-
|
302
|
+
* `ActiveRecord::Relation#reverse_order` throws `ActiveRecord::IrreversibleOrderError`
|
303
|
+
when the order can not be reversed using current trivial algorithm.
|
304
|
+
Also raises the same error when `#reverse_order` is called on
|
305
|
+
relation without any order and table has no primary key:
|
265
306
|
|
266
|
-
|
307
|
+
Topic.order("concat(author_name, title)").reverse_order
|
308
|
+
# Before: SELECT `topics`.* FROM `topics` ORDER BY concat(author_name DESC, title) DESC
|
309
|
+
# After: raises ActiveRecord::IrreversibleOrderError
|
310
|
+
Edge.all.reverse_order
|
311
|
+
# Before: SELECT `edges`.* FROM `edges` ORDER BY `edges`.`` DESC
|
312
|
+
# After: raises ActiveRecord::IrreversibleOrderError
|
267
313
|
|
268
|
-
*
|
269
|
-
well.
|
314
|
+
*Bogdan Gusiev*
|
270
315
|
|
271
|
-
|
316
|
+
* Improve schema_migrations insertion performance by inserting all versions
|
317
|
+
in one INSERT SQL.
|
272
318
|
|
273
|
-
*
|
319
|
+
*Akira Matsuda*, *Naoto Koshikawa*
|
274
320
|
|
275
|
-
|
321
|
+
* Using `references` or `belongs_to` in migrations will always add index
|
322
|
+
for the referenced column by default, without adding `index: true` option
|
323
|
+
to generated migration file. Users can opt out of this by passing
|
324
|
+
`index: false`.
|
276
325
|
|
277
|
-
|
326
|
+
Fixes #18146.
|
327
|
+
|
328
|
+
*Matthew Draper*, *Prathamesh Sonpatki*
|
278
329
|
|
279
|
-
*
|
330
|
+
* Run `type` attributes through attributes API type-casting before
|
331
|
+
instantiating the corresponding subclass. This makes it possible to define
|
332
|
+
custom STI mappings.
|
280
333
|
|
281
|
-
Fixes #
|
334
|
+
Fixes #21986.
|
335
|
+
|
336
|
+
*Yves Senn*
|
282
337
|
|
283
|
-
|
338
|
+
* Don't try to quote functions or expressions passed to `:default` option if
|
339
|
+
they are passed as procs.
|
284
340
|
|
285
|
-
|
341
|
+
This will generate proper query with the passed function or expression for
|
342
|
+
the default option, instead of trying to quote it in incorrect fashion.
|
286
343
|
|
287
344
|
Example:
|
288
345
|
|
289
|
-
|
346
|
+
create_table :posts do |t|
|
347
|
+
t.datetime :published_at, default: -> { 'NOW()' }
|
348
|
+
end
|
290
349
|
|
291
|
-
|
292
|
-
index_exists? :articles, :title, name: "idx_title" # => `true`
|
293
|
-
index_exists? :articles, :body, name: "idx_title" # => `true`
|
350
|
+
*Ryuta Kamizono*
|
294
351
|
|
295
|
-
|
296
|
-
index_exists? :articles, :title, name: "idx_title" # => `true`
|
297
|
-
index_exists? :articles, :body, name: "idx_title" # => `false`
|
352
|
+
* Fix regression when loading fixture files with symbol keys.
|
298
353
|
|
299
|
-
|
354
|
+
Fixes #22584.
|
300
355
|
|
301
|
-
*
|
302
|
-
Not passing the option is deprecated but the default is still `null: true`.
|
303
|
-
With Rails 5 this will change to `null: false`.
|
356
|
+
*Yves Senn*
|
304
357
|
|
305
|
-
|
358
|
+
* Use `version` column as primary key for schema_migrations table because
|
359
|
+
`schema_migrations` versions are guaranteed to be unique.
|
306
360
|
|
307
|
-
|
308
|
-
|
309
|
-
destroyed.
|
361
|
+
This makes it possible to use `update_attributes` on models that do
|
362
|
+
not have a primary key.
|
310
363
|
|
311
|
-
*
|
364
|
+
*Richard Schneeman*
|
312
365
|
|
313
|
-
*
|
366
|
+
* Add short-hand methods for text and blob types in MySQL.
|
314
367
|
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
id.
|
368
|
+
In Pg and Sqlite3, `:text` and `:binary` have variable unlimited length.
|
369
|
+
But in MySQL, these have limited length for each types (ref #21591, #21619).
|
370
|
+
This change adds short-hand methods for each text and blob types.
|
319
371
|
|
320
|
-
|
372
|
+
Example:
|
321
373
|
|
322
|
-
|
374
|
+
create_table :foos do |t|
|
375
|
+
t.tinyblob :tiny_blob
|
376
|
+
t.mediumblob :medium_blob
|
377
|
+
t.longblob :long_blob
|
378
|
+
t.tinytext :tiny_text
|
379
|
+
t.mediumtext :medium_text
|
380
|
+
t.longtext :long_text
|
381
|
+
end
|
323
382
|
|
324
|
-
*
|
325
|
-
Use `.load_schema_current` instead. In the future `load_schema` will
|
326
|
-
require the `configuration` to act on as an argument.
|
383
|
+
*Ryuta Kamizono*
|
327
384
|
|
328
|
-
|
385
|
+
* Take into account UTC offset when assigning string representation of
|
386
|
+
timestamp with offset specified to attribute of time type.
|
329
387
|
|
330
|
-
*
|
331
|
-
schema format.
|
388
|
+
*Andrey Novikov*
|
332
389
|
|
333
|
-
|
390
|
+
* When calling `first` with a `limit` argument, return directly from the
|
391
|
+
`loaded?` records if available.
|
334
392
|
|
335
|
-
*
|
393
|
+
*Ben Woosley*
|
336
394
|
|
337
|
-
*
|
395
|
+
* Deprecate sending the `offset` argument to `find_nth`. Please use the
|
396
|
+
`offset` method on relation instead.
|
338
397
|
|
339
|
-
*
|
398
|
+
*Ben Woosley*
|
340
399
|
|
341
|
-
*
|
400
|
+
* Limit record touching to once per transaction.
|
342
401
|
|
343
|
-
|
344
|
-
source so it has been deprecated. Code that used `source_macro`
|
345
|
-
was removed in #16353.
|
402
|
+
If you have a parent/grand-parent relation like:
|
346
403
|
|
347
|
-
|
404
|
+
Comment belongs_to :message, touch: true
|
405
|
+
Message belongs_to :project, touch: true
|
406
|
+
Project belongs_to :account, touch: true
|
348
407
|
|
349
|
-
|
408
|
+
When the lowest entry(`Comment`) is saved, now, it won't repeat the touch
|
409
|
+
call multiple times for the parent records.
|
350
410
|
|
351
|
-
|
411
|
+
Related #18606.
|
352
412
|
|
353
|
-
*
|
413
|
+
*arthurnn*
|
354
414
|
|
355
|
-
*
|
415
|
+
* Order the result of `find(ids)` to match the passed array, if the relation
|
416
|
+
has no explicit order defined.
|
356
417
|
|
357
|
-
|
418
|
+
Fixes #20338.
|
358
419
|
|
359
|
-
|
360
|
-
t.jsonb :meta_data
|
361
|
-
end
|
420
|
+
*Miguel Grazziotin*, *Matthew Draper*
|
362
421
|
|
363
|
-
|
422
|
+
* Omit default limit values in dumped schema. It's tidier, and if the defaults
|
423
|
+
change in the future, we can address that via Migration API Versioning.
|
364
424
|
|
365
|
-
*
|
425
|
+
*Jean Boussier*
|
366
426
|
|
367
|
-
|
427
|
+
* Support passing the schema name as a prefix to table name in
|
428
|
+
`ConnectionAdapters::SchemaStatements#indexes`. Previously the prefix would
|
429
|
+
be considered a full part of the index name, and only the schema in the
|
430
|
+
current search path would be considered.
|
368
431
|
|
369
|
-
*
|
370
|
-
`DROP DEFAULT` instead of a `DEFAULT NULL` query.
|
432
|
+
*Grey Baker*
|
371
433
|
|
372
|
-
|
434
|
+
* Ignore index name in `index_exists?` and `remove_index` when not passed a
|
435
|
+
name to check for.
|
373
436
|
|
374
|
-
*
|
437
|
+
*Grey Baker*
|
375
438
|
|
376
|
-
*
|
377
|
-
|
439
|
+
* Extract support for the legacy `mysql` database adapter from core. It will
|
440
|
+
live on in a separate gem for now, but most users should just use `mysql2`.
|
378
441
|
|
379
|
-
|
442
|
+
*Abdelkader Boudih*
|
443
|
+
|
444
|
+
* ApplicationRecord is a new superclass for all app models, analogous to app
|
445
|
+
controllers subclassing ApplicationController instead of
|
446
|
+
ActionController::Base. This gives apps a single spot to configure app-wide
|
447
|
+
model behavior.
|
448
|
+
|
449
|
+
Newly generated applications have `app/models/application_record.rb`
|
450
|
+
present by default.
|
451
|
+
|
452
|
+
*Genadi Samokovarov*
|
380
453
|
|
381
|
-
|
382
|
-
|
454
|
+
* Version the API presented to migration classes, so we can change parameter
|
455
|
+
defaults without breaking existing migrations, or forcing them to be
|
456
|
+
rewritten through a deprecation cycle.
|
457
|
+
|
458
|
+
New migrations specify the Rails version they were written for:
|
459
|
+
|
460
|
+
class AddStatusToOrders < ActiveRecord::Migration[5.0]
|
461
|
+
def change
|
462
|
+
# ...
|
463
|
+
end
|
383
464
|
end
|
384
465
|
|
385
|
-
*
|
466
|
+
*Matthew Draper*, *Ravil Bayramgalin*
|
467
|
+
|
468
|
+
* Use bind params for `limit` and `offset`. This will generate significantly
|
469
|
+
fewer prepared statements for common tasks like pagination. To support this
|
470
|
+
change, passing a string containing a comma to `limit` has been deprecated,
|
471
|
+
and passing an Arel node to `limit` is no longer supported.
|
386
472
|
|
387
|
-
|
388
|
-
This matches the existing behavior of HABTM associations.
|
473
|
+
Fixes #22250.
|
389
474
|
|
390
|
-
|
475
|
+
*Sean Griffin*
|
476
|
+
|
477
|
+
* Introduce after_{create,update,delete}_commit callbacks.
|
391
478
|
|
392
|
-
|
479
|
+
Before:
|
393
480
|
|
394
|
-
|
395
|
-
|
481
|
+
after_commit :add_to_index_later, on: :create
|
482
|
+
after_commit :update_in_index_later, on: :update
|
483
|
+
after_commit :remove_from_index_later, on: :destroy
|
396
484
|
|
397
|
-
|
485
|
+
After:
|
398
486
|
|
399
|
-
|
487
|
+
after_create_commit :add_to_index_later
|
488
|
+
after_update_commit :update_in_index_later
|
489
|
+
after_destroy_commit :remove_from_index_later
|
400
490
|
|
401
|
-
|
491
|
+
Fixes #22515.
|
402
492
|
|
403
|
-
*
|
493
|
+
*Genadi Samokovarov*
|
404
494
|
|
405
|
-
|
406
|
-
|
495
|
+
* Respect the column default values for `inheritance_column` when
|
496
|
+
instantiating records through the base class.
|
497
|
+
|
498
|
+
Fixes #17121.
|
407
499
|
|
408
500
|
Example:
|
409
501
|
|
410
|
-
|
411
|
-
|
412
|
-
|
502
|
+
# The schema of BaseModel has `t.string :type, default: 'SubType'`
|
503
|
+
subtype = BaseModel.new
|
504
|
+
assert_equals SubType, subtype.class
|
413
505
|
|
414
|
-
|
415
|
-
include ActiveModel::Model
|
416
|
-
attr_accessor :category, :text
|
417
|
-
end
|
506
|
+
*Kuldeep Aggarwal*
|
418
507
|
|
419
|
-
|
420
|
-
post.comment = Comment.new(category: "Animals", text: "This is a comment about squirrels.")
|
421
|
-
post.save!
|
508
|
+
* Fix `rake db:structure:dump` on Postgres when multiple schemas are used.
|
422
509
|
|
423
|
-
|
424
|
-
post.comment # => {"category"=>"Animals", "text"=>"This is a comment about squirrels."}
|
510
|
+
Fixes #22346.
|
425
511
|
|
426
|
-
|
427
|
-
post.comment # => "#<Comment:0x007f80ab48ff98>"
|
512
|
+
*Nick Muerdter*, *ckoenig*
|
428
513
|
|
429
|
-
|
430
|
-
post.comment # => {"category"=>"Animals", "text"=>"This is a comment about squirrels."}
|
514
|
+
* Add schema dumping support for PostgreSQL geometric data types.
|
431
515
|
|
432
|
-
|
433
|
-
new `ActiveRecord::Coders::JSON` coder which delegates its `dump/load` to
|
434
|
-
`ActiveSupport::JSON.encode/decode`. This ensures special objects are dumped
|
435
|
-
correctly using the `#as_json` hook.
|
516
|
+
*Ryuta Kamizono*
|
436
517
|
|
437
|
-
|
438
|
-
([example](https://gist.github.com/jenncoop/8c4142bbe59da77daa63)).
|
518
|
+
* Except keys of `build_record`'s argument from `create_scope` in `initialize_attributes`.
|
439
519
|
|
440
|
-
Fixes #
|
520
|
+
Fixes #21893.
|
441
521
|
|
442
|
-
*
|
522
|
+
*Yuichiro Kaneko*
|
443
523
|
|
444
|
-
*
|
524
|
+
* Deprecate `connection.tables` on the SQLite3 and MySQL adapters.
|
525
|
+
Also deprecate passing arguments to `#tables`.
|
526
|
+
And deprecate `table_exists?`.
|
445
527
|
|
446
|
-
|
528
|
+
The `#tables` method of some adapters (mysql, mysql2, sqlite3) would return
|
529
|
+
both tables and views while others (postgresql) just return tables. To make
|
530
|
+
their behavior consistent, `#tables` will return only tables in the future.
|
447
531
|
|
448
|
-
|
532
|
+
The `#table_exists?` method would check both tables and views. To make
|
533
|
+
their behavior consistent with `#tables`, `#table_exists?` will check only
|
534
|
+
tables in the future.
|
449
535
|
|
450
|
-
*
|
451
|
-
counter cache if one exists.
|
536
|
+
*Yuichiro Kaneko*
|
452
537
|
|
453
|
-
|
538
|
+
* Improve support for non Active Record objects on `validates_associated`
|
454
539
|
|
455
|
-
|
456
|
-
|
540
|
+
Skipping `marked_for_destruction?` when the associated object does not responds
|
541
|
+
to it make easier to validate virtual associations built on top of Active Model
|
542
|
+
objects and/or serialized objects that implement a `valid?` instance method.
|
457
543
|
|
458
|
-
|
544
|
+
*Kassio Borges*, *Lucas Mazza*
|
459
545
|
|
460
|
-
|
546
|
+
* Change connection management middleware to return a new response with
|
547
|
+
a body proxy, rather than mutating the original.
|
461
548
|
|
462
|
-
*
|
463
|
-
|
549
|
+
*Kevin Buchanan*
|
550
|
+
|
551
|
+
* Make `db:migrate:status` to render `1_some.rb` format migrate files.
|
552
|
+
|
553
|
+
These files are in `db/migrate`:
|
554
|
+
|
555
|
+
* 1_valid_people_have_last_names.rb
|
556
|
+
* 20150819202140_irreversible_migration.rb
|
557
|
+
* 20150823202140_add_admin_flag_to_users.rb
|
558
|
+
* 20150823202141_migration_tests.rb
|
559
|
+
* 2_we_need_reminders.rb
|
560
|
+
* 3_innocent_jointable.rb
|
464
561
|
|
465
562
|
Before:
|
466
563
|
|
467
|
-
|
468
|
-
|
564
|
+
$ bundle exec rake db:migrate:status
|
565
|
+
...
|
469
566
|
|
470
|
-
|
567
|
+
Status Migration ID Migration Name
|
568
|
+
--------------------------------------------------
|
569
|
+
up 001 ********** NO FILE **********
|
570
|
+
up 002 ********** NO FILE **********
|
571
|
+
up 003 ********** NO FILE **********
|
572
|
+
up 20150819202140 Irreversible migration
|
573
|
+
up 20150823202140 Add admin flag to users
|
574
|
+
up 20150823202141 Migration tests
|
471
575
|
|
472
|
-
|
473
|
-
"categorizations"."category_id" = 1
|
576
|
+
After:
|
474
577
|
|
475
|
-
|
578
|
+
$ bundle exec rake db:migrate:status
|
579
|
+
...
|
476
580
|
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
581
|
+
Status Migration ID Migration Name
|
582
|
+
--------------------------------------------------
|
583
|
+
up 001 Valid people have last names
|
584
|
+
up 002 We need reminders
|
585
|
+
up 003 Innocent jointable
|
586
|
+
up 20150819202140 Irreversible migration
|
587
|
+
up 20150823202140 Add admin flag to users
|
588
|
+
up 20150823202141 Migration tests
|
481
589
|
|
482
|
-
|
590
|
+
*Yuichiro Kaneko*
|
483
591
|
|
484
|
-
|
592
|
+
* Define `ActiveRecord::Sanitization.sanitize_sql_for_order` and use it inside
|
593
|
+
`preprocess_order_args`.
|
485
594
|
|
486
|
-
*
|
595
|
+
*Yuichiro Kaneko*
|
487
596
|
|
488
|
-
*
|
489
|
-
API for presence validations on associations.
|
597
|
+
* Allow bigint with default nil for avoiding auto increment primary key.
|
490
598
|
|
491
|
-
*
|
599
|
+
*Ryuta Kamizono*
|
492
600
|
|
493
|
-
*
|
494
|
-
(Call to `count` generated invalid SQL.)
|
601
|
+
* Remove `DEFAULT_CHARSET` and `DEFAULT_COLLATION` in `MySQLDatabaseTasks`.
|
495
602
|
|
496
|
-
|
603
|
+
We should omit the collation entirely rather than providing a default.
|
604
|
+
Then the choice is the responsibility of the server and MySQL distribution.
|
497
605
|
|
498
|
-
*
|
606
|
+
*Ryuta Kamizono*
|
499
607
|
|
500
|
-
|
608
|
+
* Alias `ActiveRecord::Relation#left_joins` to
|
609
|
+
`ActiveRecord::Relation#left_outer_joins`.
|
501
610
|
|
502
|
-
*
|
611
|
+
*Takashi Kokubun*
|
503
612
|
|
504
|
-
*
|
613
|
+
* Use advisory locking to raise a `ConcurrentMigrationError` instead of
|
614
|
+
attempting to migrate when another migration is currently running.
|
505
615
|
|
506
|
-
*
|
616
|
+
*Sam Davies*
|
507
617
|
|
508
|
-
*
|
509
|
-
from `before_destroy` to `after_destroy` callback chain
|
618
|
+
* Added `ActiveRecord::Relation#left_outer_joins`.
|
510
619
|
|
511
|
-
|
620
|
+
Example:
|
512
621
|
|
513
|
-
|
622
|
+
User.left_outer_joins(:posts)
|
623
|
+
# => SELECT "users".* FROM "users" LEFT OUTER JOIN "posts" ON
|
624
|
+
"posts"."user_id" = "users"."id"
|
514
625
|
|
515
|
-
*
|
626
|
+
*Florian Thomas*
|
516
627
|
|
517
|
-
|
518
|
-
changed in order for it to be persisted in the database. Now it is no longer
|
519
|
-
required.
|
628
|
+
* Support passing an array to `order` for SQL parameter sanitization.
|
520
629
|
|
521
|
-
|
630
|
+
*Aaron Suggs*
|
522
631
|
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
632
|
+
* Avoid disabling errors on the PostgreSQL connection when enabling the
|
633
|
+
`standard_conforming_strings` setting. Errors were previously disabled because
|
634
|
+
the setting wasn't writable in Postgres 8.1 and didn't exist in earlier
|
635
|
+
versions. Now Rails only supports Postgres 8.2+ we're fine to assume the
|
636
|
+
setting exists. Disabling errors caused problems when using a connection
|
637
|
+
pooling tool like PgBouncer because it's not guaranteed to have the same
|
638
|
+
connection between calls to `execute` and it could leave the connection
|
639
|
+
with errors disabled.
|
528
640
|
|
529
|
-
|
641
|
+
Fixes #22101.
|
530
642
|
|
531
|
-
|
532
|
-
user.name << ' Griffin'
|
533
|
-
user.save
|
534
|
-
user.reload.name # => "Sean Griffin"
|
643
|
+
*Harry Marr*
|
535
644
|
|
536
|
-
|
645
|
+
* Set `scope.reordering_value` to `true` if `:reordering`-values are specified.
|
537
646
|
|
538
|
-
|
539
|
-
is invalid.
|
647
|
+
Fixes #21886.
|
540
648
|
|
541
|
-
*
|
649
|
+
*Hiroaki Izu*
|
542
650
|
|
543
|
-
*
|
544
|
-
a part of `schema.rb`. This is supported by Mysql2Adapter, MysqlAdapter
|
545
|
-
and PostgreSQLAdapter.
|
651
|
+
* Add support for bidirectional destroy dependencies.
|
546
652
|
|
547
|
-
|
548
|
-
[foreigner](https://github.com/matthuhiggins/foreigner).
|
653
|
+
Fixes #13609.
|
549
654
|
|
550
655
|
Example:
|
551
656
|
|
552
|
-
|
553
|
-
|
554
|
-
|
657
|
+
class Content < ActiveRecord::Base
|
658
|
+
has_one :position, dependent: :destroy
|
659
|
+
end
|
555
660
|
|
556
|
-
|
661
|
+
class Position < ActiveRecord::Base
|
662
|
+
belongs_to :content, dependent: :destroy
|
663
|
+
end
|
557
664
|
|
558
|
-
*
|
559
|
-
key. `'id'` will no longer be part of the attributes hash.
|
665
|
+
*Seb Jacobs*
|
560
666
|
|
561
|
-
|
667
|
+
* Includes HABTM returns correct size now. It's caused by the join dependency
|
668
|
+
only instantiates one HABTM object because the join table hasn't a primary key.
|
562
669
|
|
563
|
-
|
564
|
-
broken and inconsistent.
|
670
|
+
Fixes #16032.
|
565
671
|
|
566
|
-
|
672
|
+
Examples:
|
567
673
|
|
568
|
-
|
674
|
+
before:
|
569
675
|
|
570
|
-
|
676
|
+
Project.first.salaried_developers.size # => 3
|
677
|
+
Project.includes(:salaried_developers).first.salaried_developers.size # => 1
|
571
678
|
|
572
|
-
|
679
|
+
after:
|
680
|
+
|
681
|
+
Project.first.salaried_developers.size # => 3
|
682
|
+
Project.includes(:salaried_developers).first.salaried_developers.size # => 3
|
683
|
+
|
684
|
+
*Bigxiang*
|
573
685
|
|
574
|
-
*
|
575
|
-
|
576
|
-
|
686
|
+
* Add option to index errors in nested attributes.
|
687
|
+
|
688
|
+
For models which have nested attributes, errors within those models will
|
689
|
+
now be indexed if `:index_errors` option is set to true when defining a
|
690
|
+
`has_many` relationship or by setting the configuration option
|
691
|
+
`config.active_record.index_nested_attribute_errors` to true.
|
577
692
|
|
578
693
|
Example:
|
579
694
|
|
580
|
-
|
581
|
-
|
582
|
-
|
695
|
+
class Guitar < ActiveRecord::Base
|
696
|
+
has_many :tuning_pegs, index_errors: true
|
697
|
+
accepts_nested_attributes_for :tuning_pegs
|
698
|
+
end
|
583
699
|
|
584
|
-
|
700
|
+
class TuningPeg < ActiveRecord::Base
|
701
|
+
belongs_to :guitar
|
702
|
+
validates_numericality_of :pitch
|
703
|
+
end
|
585
704
|
|
586
|
-
|
705
|
+
# Before
|
706
|
+
guitar.errors["tuning_pegs.pitch"] = ["is not a number"]
|
587
707
|
|
588
|
-
|
589
|
-
|
590
|
-
as it would be with `Model.find(model.id)`.
|
708
|
+
# After
|
709
|
+
guitar.errors["tuning_pegs[1].pitch"] = ["is not a number"]
|
591
710
|
|
592
|
-
*
|
711
|
+
*Michael Probber*, *Terence Sun*
|
593
712
|
|
594
|
-
*
|
595
|
-
If this is not the case a `NoMethodError` is raised.
|
713
|
+
* Exit with non-zero status for failed database rake tasks.
|
596
714
|
|
597
|
-
*
|
715
|
+
*Jay Hayes*
|
598
716
|
|
599
|
-
*
|
717
|
+
* Queries such as `Computer.joins(:monitor).group(:status).count` will now be
|
718
|
+
interpreted as `Computer.joins(:monitor).group('computers.status').count`
|
719
|
+
so that when `Computer` and `Monitor` have both `status` columns we don't
|
720
|
+
have conflicts in projection.
|
600
721
|
|
601
|
-
*
|
722
|
+
*Rafael Sales*
|
602
723
|
|
603
|
-
* Add
|
724
|
+
* Add ability to default to `uuid` as primary key when generating database migrations.
|
604
725
|
|
605
|
-
|
726
|
+
Example:
|
606
727
|
|
607
|
-
|
728
|
+
config.generators do |g|
|
729
|
+
g.orm :active_record, primary_key_type: :uuid
|
730
|
+
end
|
608
731
|
|
609
|
-
*
|
732
|
+
*Jon McCartie*
|
610
733
|
|
611
|
-
*
|
612
|
-
are part of the URI structure, not the actual host.
|
734
|
+
* Don't cache arguments in `#find_by` if they are an `ActiveRecord::Relation`.
|
613
735
|
|
614
|
-
Fixes #
|
736
|
+
Fixes #20817.
|
615
737
|
|
616
|
-
*
|
738
|
+
*Hiroaki Izu*
|
617
739
|
|
618
|
-
*
|
619
|
-
through association are new.
|
740
|
+
* Qualify column name inserted by `group` in calculation.
|
620
741
|
|
621
|
-
|
742
|
+
Giving `group` an unqualified column name now works, even if the relation
|
743
|
+
has `JOIN` with another table which also has a column of the name.
|
622
744
|
|
623
|
-
*
|
624
|
-
Serialized attributes on ActiveRecord models will no longer save when
|
625
|
-
unchanged.
|
745
|
+
*Soutaro Matsumoto*
|
626
746
|
|
627
|
-
|
747
|
+
* Don't cache prepared statements containing an IN clause or a SQL literal, as
|
748
|
+
these queries will change often and are unlikely to have a cache hit.
|
628
749
|
|
629
750
|
*Sean Griffin*
|
630
751
|
|
631
|
-
* `
|
632
|
-
name.
|
752
|
+
* Fix `rewhere` in a `has_many` association.
|
633
753
|
|
634
|
-
Fixes #
|
754
|
+
Fixes #21955.
|
635
755
|
|
636
|
-
*
|
756
|
+
*Josh Branchaud*, *Kal*
|
637
757
|
|
638
|
-
*
|
758
|
+
* `where` raises ArgumentError on unsupported types.
|
639
759
|
|
640
|
-
|
760
|
+
Fixes #20473.
|
641
761
|
|
642
|
-
*
|
762
|
+
*Jake Worth*
|
643
763
|
|
644
|
-
|
764
|
+
* Add an immutable string type to help reduce memory usage for apps which do
|
765
|
+
not need mutation detection on strings.
|
645
766
|
|
646
|
-
*
|
647
|
-
`Enumerable#find` does.
|
767
|
+
*Sean Griffin*
|
648
768
|
|
649
|
-
|
769
|
+
* Give `ActiveRecord::Relation#update` its own deprecation warning when
|
770
|
+
passed an `ActiveRecord::Base` instance.
|
650
771
|
|
651
|
-
|
772
|
+
Fixes #21945.
|
652
773
|
|
653
|
-
*
|
774
|
+
*Ted Johansson*
|
654
775
|
|
655
|
-
|
776
|
+
* Make it possible to pass `:to_table` when adding a foreign key through
|
777
|
+
`add_reference`.
|
656
778
|
|
657
|
-
|
779
|
+
Fixes #21563.
|
658
780
|
|
659
|
-
*
|
660
|
-
`primary_key_prefix_type` configuration.
|
781
|
+
*Yves Senn*
|
661
782
|
|
662
|
-
|
783
|
+
* No longer pass deprecated option `-i` to `pg_dump`.
|
663
784
|
|
664
|
-
*
|
785
|
+
*Paul Sadauskas*
|
665
786
|
|
666
|
-
*
|
787
|
+
* Concurrent `AR::Base#increment!` and `#decrement!` on the same record
|
788
|
+
are all reflected in the database rather than overwriting each other.
|
667
789
|
|
668
|
-
|
790
|
+
*Bogdan Gusiev*
|
669
791
|
|
670
|
-
|
792
|
+
* Avoid leaking the first relation we call `first` on, per model.
|
671
793
|
|
672
|
-
|
794
|
+
Fixes #21921.
|
673
795
|
|
674
|
-
|
675
|
-
updated.
|
796
|
+
*Matthew Draper*, *Jean Boussier*
|
676
797
|
|
677
|
-
|
798
|
+
* Remove unused `pk_and_sequence_for` in `AbstractMysqlAdapter`.
|
678
799
|
|
679
|
-
*
|
800
|
+
*Ryuta Kamizono*
|
680
801
|
|
681
|
-
*
|
682
|
-
`proper_table_name` instance method on `ActiveRecord::Migration` instead.
|
802
|
+
* Allow fixtures files to set the model class in the YAML file itself.
|
683
803
|
|
684
|
-
|
804
|
+
To load the fixtures file `accounts.yml` as the `User` model, use:
|
685
805
|
|
686
|
-
|
687
|
-
|
806
|
+
_fixture:
|
807
|
+
model_class: User
|
808
|
+
david:
|
809
|
+
name: David
|
688
810
|
|
689
|
-
Fixes #
|
811
|
+
Fixes #9516.
|
690
812
|
|
691
|
-
*
|
813
|
+
*Roque Pinel*
|
692
814
|
|
693
|
-
*
|
694
|
-
|
815
|
+
* Don't require a database connection to load a class which uses acceptance
|
816
|
+
validations.
|
695
817
|
|
696
818
|
*Sean Griffin*
|
697
819
|
|
698
|
-
*
|
820
|
+
* Correctly apply `unscope` when preloading through associations.
|
699
821
|
|
700
|
-
*
|
822
|
+
*Jimmy Bourassa*
|
701
823
|
|
702
|
-
*
|
703
|
-
columns.
|
824
|
+
* Fixed taking precision into count when assigning a value to timestamp attribute.
|
704
825
|
|
705
|
-
|
826
|
+
Timestamp column can have less precision than ruby timestamp
|
827
|
+
In result in how big a fraction of a second can be stored in the
|
828
|
+
database.
|
706
829
|
|
707
|
-
* New records remain new after YAML serialization.
|
708
830
|
|
709
|
-
|
831
|
+
m = Model.create!
|
832
|
+
m.created_at.usec == m.reload.created_at.usec # => false
|
833
|
+
# due to different precision in Time.now and database column
|
710
834
|
|
711
|
-
|
835
|
+
If the precision is low enough, (mysql default is 0, so it is always low
|
836
|
+
enough by default) the value changes when model is reloaded from the
|
837
|
+
database. This patch fixes that issue ensuring that any timestamp
|
838
|
+
assigned as an attribute is converted to column precision under the
|
839
|
+
attribute.
|
712
840
|
|
713
|
-
*
|
841
|
+
*Bogdan Gusiev*
|
714
842
|
|
715
|
-
*
|
843
|
+
* Introduce `connection.data_sources` and `connection.data_source_exists?`.
|
844
|
+
These methods determine what relations can be used to back Active Record
|
845
|
+
models (usually tables and views).
|
716
846
|
|
717
|
-
|
847
|
+
Also deprecate `SchemaCache#tables`, `SchemaCache#table_exists?` and
|
848
|
+
`SchemaCache#clear_table_cache!` in favor of their new data source
|
849
|
+
counterparts.
|
718
850
|
|
719
|
-
*
|
720
|
-
with orders without sort direction modifiers.
|
851
|
+
*Yves Senn*, *Matthew Draper*
|
721
852
|
|
722
|
-
|
853
|
+
* Add `ActiveRecord::Base.ignored_columns` to make some columns
|
854
|
+
invisible from Active Record.
|
723
855
|
|
724
|
-
*
|
856
|
+
*Jean Boussier*
|
725
857
|
|
726
|
-
|
858
|
+
* `ActiveRecord::Tasks::MySQLDatabaseTasks` fails if shellout to
|
859
|
+
mysql commands (like `mysqldump`) is not successful.
|
727
860
|
|
728
|
-
*
|
729
|
-
Fixes duplication in combination with `store_accessor`.
|
861
|
+
*Steve Mitchell*
|
730
862
|
|
731
|
-
|
863
|
+
* Ensure `select` quotes aliased attributes, even when using `from`.
|
732
864
|
|
733
|
-
|
865
|
+
Fixes #21488.
|
734
866
|
|
735
|
-
*
|
867
|
+
*Sean Griffin*, *@johanlunds*
|
736
868
|
|
737
|
-
|
869
|
+
* MySQL: support `unsigned` numeric data types.
|
738
870
|
|
739
|
-
|
740
|
-
Fixing regression case, where redefining the same `has_and_belongs_to_many`
|
741
|
-
definition into a subclass would raise.
|
871
|
+
Example:
|
742
872
|
|
743
|
-
|
873
|
+
create_table :foos do |t|
|
874
|
+
t.unsigned_integer :quantity
|
875
|
+
t.unsigned_bigint :total
|
876
|
+
t.unsigned_float :percentage
|
877
|
+
t.unsigned_decimal :price, precision: 10, scale: 2
|
878
|
+
end
|
744
879
|
|
745
|
-
|
880
|
+
The `unsigned: true` option may be used for the primary key:
|
746
881
|
|
747
|
-
|
748
|
-
|
749
|
-
|
882
|
+
create_table :foos, id: :bigint, unsigned: true do |t|
|
883
|
+
…
|
884
|
+
end
|
750
885
|
|
751
|
-
|
886
|
+
*Ryuta Kamizono*
|
752
887
|
|
753
|
-
|
888
|
+
* Add `#views` and `#view_exists?` methods on connection adapters.
|
754
889
|
|
755
|
-
*
|
890
|
+
*Ryuta Kamizono*
|
756
891
|
|
757
|
-
|
892
|
+
* Correctly dump composite primary key.
|
758
893
|
|
759
|
-
|
894
|
+
Example:
|
760
895
|
|
761
|
-
|
762
|
-
|
896
|
+
create_table :barcodes, primary_key: ["region", "code"] do |t|
|
897
|
+
t.string :region
|
898
|
+
t.integer :code
|
899
|
+
end
|
763
900
|
|
764
|
-
*
|
901
|
+
*Ryuta Kamizono*
|
765
902
|
|
766
|
-
*
|
767
|
-
|
903
|
+
* Lookup the attribute name for `restrict_with_error` messages on the
|
904
|
+
model class that defines the association.
|
768
905
|
|
769
|
-
*
|
906
|
+
*kuboon*, *Ronak Jangir*
|
770
907
|
|
771
|
-
*
|
908
|
+
* Correct query for PostgreSQL 8.2 compatibility.
|
772
909
|
|
773
|
-
|
910
|
+
*Ben Murphy*, *Matthew Draper*
|
774
911
|
|
775
|
-
|
912
|
+
* `bin/rails db:migrate` uses
|
913
|
+
`ActiveRecord::Tasks::DatabaseTasks.migrations_paths` instead of
|
914
|
+
`Migrator.migrations_paths`.
|
776
915
|
|
777
|
-
*
|
916
|
+
*Tobias Bielohlawek*
|
778
917
|
|
779
|
-
|
780
|
-
record will only be touched if the record was modified. This makes it
|
781
|
-
consistent with timestamp updating on the record itself.
|
918
|
+
* Support dropping indexes concurrently in PostgreSQL.
|
782
919
|
|
783
|
-
|
920
|
+
See http://www.postgresql.org/docs/9.4/static/sql-dropindex.html for more
|
921
|
+
details.
|
784
922
|
|
785
|
-
*
|
786
|
-
table inside a schema.
|
923
|
+
*Grey Baker*
|
787
924
|
|
788
|
-
|
925
|
+
* Deprecate passing conditions to `ActiveRecord::Relation#delete_all`
|
926
|
+
and `ActiveRecord::Relation#destroy_all`.
|
789
927
|
|
790
|
-
*
|
928
|
+
*Wojciech Wnętrzak*
|
791
929
|
|
792
|
-
*
|
793
|
-
|
794
|
-
`
|
930
|
+
* Instantiating an AR model with `ActionController::Parameters` now raises
|
931
|
+
an `ActiveModel::ForbiddenAttributesError` if the parameters include a
|
932
|
+
`type` field that has not been explicitly permitted. Previously, the
|
933
|
+
`type` field was simply ignored in the same situation.
|
795
934
|
|
796
|
-
*
|
935
|
+
*Prem Sichanugrist*
|
797
936
|
|
798
|
-
*
|
799
|
-
|
937
|
+
* PostgreSQL, `create_schema`, `drop_schema` and `rename_table` now quote
|
938
|
+
schema names.
|
800
939
|
|
801
|
-
|
940
|
+
Fixes #21418.
|
802
941
|
|
803
|
-
|
804
|
-
`references`, now works with any column types.
|
942
|
+
Example:
|
805
943
|
|
806
|
-
|
944
|
+
create_schema("my.schema")
|
945
|
+
# CREATE SCHEMA "my.schema";
|
807
946
|
|
808
|
-
*
|
947
|
+
*Yves Senn*
|
809
948
|
|
810
|
-
|
949
|
+
* PostgreSQL, add `:if_exists` option to `#drop_schema`. This makes it
|
950
|
+
possible to drop a schema that might exist without raising an exception if
|
951
|
+
it doesn't.
|
811
952
|
|
812
|
-
*
|
813
|
-
or `offset`.
|
953
|
+
*Yves Senn*
|
814
954
|
|
815
|
-
|
816
|
-
records to be deleted.
|
955
|
+
* Only try to nullify has_one target association if the record is persisted.
|
817
956
|
|
818
|
-
Fixes #
|
957
|
+
Fixes #21223.
|
819
958
|
|
820
|
-
*
|
959
|
+
*Agis Anastasopoulos*
|
821
960
|
|
822
|
-
*
|
823
|
-
|
961
|
+
* Uniqueness validator raises descriptive error when running on a persisted
|
962
|
+
record without primary key.
|
824
963
|
|
825
|
-
Fixes #
|
964
|
+
Fixes #21304.
|
826
965
|
|
827
|
-
*
|
966
|
+
*Yves Senn*
|
828
967
|
|
829
|
-
*
|
830
|
-
association.
|
968
|
+
* Add a native JSON data type support in MySQL.
|
831
969
|
|
832
|
-
|
970
|
+
Example:
|
833
971
|
|
834
|
-
|
972
|
+
create_table :json_data_type do |t|
|
973
|
+
t.json :settings
|
974
|
+
end
|
835
975
|
|
836
|
-
*
|
837
|
-
strings in column names as equal.
|
976
|
+
*Ryuta Kamizono*
|
838
977
|
|
839
|
-
|
840
|
-
placeholders for them in the generated SQL statement, which can make PostgreSQL
|
841
|
-
throw a `StatementInvalid` exception.
|
978
|
+
* Descriptive error message when fixtures contain a missing column.
|
842
979
|
|
843
|
-
|
980
|
+
Fixes #21201.
|
844
981
|
|
845
|
-
*
|
846
|
-
attributes defined in parent classes.
|
982
|
+
*Yves Senn*
|
847
983
|
|
848
|
-
|
984
|
+
* `ActiveRecord::Tasks::PostgreSQLDatabaseTasks` fail if shellout to
|
985
|
+
postgresql commands (like `pg_dump`) is not successful.
|
849
986
|
|
850
|
-
*
|
987
|
+
*Bryan Paxton*, *Nate Berkopec*
|
851
988
|
|
852
|
-
* `
|
989
|
+
* Add `ActiveRecord::Relation#in_batches` to work with records and relations
|
990
|
+
in batches.
|
853
991
|
|
854
|
-
|
992
|
+
Available options are `of` (batch size), `load`, `start`, and `finish`.
|
855
993
|
|
856
|
-
|
994
|
+
Examples:
|
857
995
|
|
858
|
-
|
996
|
+
Person.in_batches.each_record(&:party_all_night!)
|
997
|
+
Person.in_batches.update_all(awesome: true)
|
998
|
+
Person.in_batches.delete_all
|
999
|
+
Person.in_batches.each do |relation|
|
1000
|
+
relation.delete_all
|
1001
|
+
sleep 10 # Throttles the delete queries
|
1002
|
+
end
|
859
1003
|
|
860
|
-
|
861
|
-
PostgreSQL and are used by internal system catalogs. These field types
|
862
|
-
can sometimes show up in structure-sniffing queries that feature internal system
|
863
|
-
structures or with certain PostgreSQL extensions.
|
1004
|
+
Fixes #20933.
|
864
1005
|
|
865
|
-
*
|
1006
|
+
*Sina Siadat*
|
866
1007
|
|
867
|
-
*
|
868
|
-
NaN PostgreSQL values into a native Ruby `Float::INFINITY` and `Float::NAN`
|
1008
|
+
* Added methods for PostgreSQL geometric data types to use in migrations.
|
869
1009
|
|
870
|
-
|
1010
|
+
Example:
|
871
1011
|
|
872
|
-
|
873
|
-
|
1012
|
+
create_table :foo do |t|
|
1013
|
+
t.line :foo_line
|
1014
|
+
t.lseg :foo_lseg
|
1015
|
+
t.box :foo_box
|
1016
|
+
t.path :foo_path
|
1017
|
+
t.polygon :foo_polygon
|
1018
|
+
t.circle :foo_circle
|
1019
|
+
end
|
874
1020
|
|
875
|
-
|
1021
|
+
*Mehmet Emin İNAÇ*
|
876
1022
|
|
877
|
-
|
878
|
-
Point.last.value # => Infinity
|
1023
|
+
* Add `cache_key` to ActiveRecord::Relation.
|
879
1024
|
|
880
|
-
|
1025
|
+
Example:
|
881
1026
|
|
882
|
-
|
1027
|
+
@users = User.where("name like ?", "%Alberto%")
|
1028
|
+
@users.cache_key
|
1029
|
+
# => "/users/query-5942b155a43b139f2471b872ac54251f-3-20150714212107656125000"
|
883
1030
|
|
884
|
-
|
1031
|
+
*Alberto Fernández-Capel*
|
885
1032
|
|
886
|
-
|
1033
|
+
* Properly allow uniqueness validations on primary keys.
|
887
1034
|
|
888
|
-
|
889
|
-
associations without replacement. These operations happen before instances
|
890
|
-
are created. The current behavior is unexpected and can result in broken
|
891
|
-
behavior.
|
1035
|
+
Fixes #20966.
|
892
1036
|
|
893
|
-
|
1037
|
+
*Sean Griffin*, *presskey*
|
894
1038
|
|
895
|
-
|
1039
|
+
* Don't raise an error if an association failed to destroy when `destroy` was
|
1040
|
+
called on the parent (as opposed to `destroy!`).
|
896
1041
|
|
897
|
-
|
1042
|
+
Fixes #20991.
|
898
1043
|
|
899
|
-
|
900
|
-
size calculation if the collection is not cached or loaded.
|
1044
|
+
*Sean Griffin*
|
901
1045
|
|
902
|
-
|
1046
|
+
* `ActiveRecord::RecordNotFound` modified to store model name, primary_key and
|
1047
|
+
id of the caller model. It allows the catcher of this exception to make
|
1048
|
+
a better decision to what to do with it.
|
903
1049
|
|
904
|
-
|
1050
|
+
Example:
|
905
1051
|
|
906
|
-
|
907
|
-
|
1052
|
+
class SomeAbstractController < ActionController::Base
|
1053
|
+
rescue_from ActiveRecord::RecordNotFound, with: :redirect_to_404
|
908
1054
|
|
909
|
-
|
1055
|
+
private def redirect_to_404(e)
|
1056
|
+
return redirect_to(posts_url) if e.model == 'Post'
|
1057
|
+
raise
|
1058
|
+
end
|
1059
|
+
end
|
910
1060
|
|
911
|
-
*
|
1061
|
+
*Sameer Rahmani*
|
912
1062
|
|
913
|
-
|
914
|
-
|
1063
|
+
* Deprecate the keys for association `restrict_dependent_destroy` errors in favor
|
1064
|
+
of new key names.
|
915
1065
|
|
916
|
-
|
1066
|
+
Previously `has_one` and `has_many` associations were using the
|
1067
|
+
`one` and `many` keys respectively. Both of these keys have special
|
1068
|
+
meaning in I18n (they are considered to be pluralizations) so by
|
1069
|
+
renaming them to `has_one` and `has_many` we make the messages more explicit
|
1070
|
+
and most importantly they don't clash with linguistical systems that need to
|
1071
|
+
validate translation keys (and their pluralizations).
|
917
1072
|
|
918
|
-
|
1073
|
+
The `:'restrict_dependent_destroy.one'` key should be replaced with
|
1074
|
+
`:'restrict_dependent_destroy.has_one'`, and `:'restrict_dependent_destroy.many'`
|
1075
|
+
with `:'restrict_dependent_destroy.has_many'`.
|
919
1076
|
|
920
|
-
|
921
|
-
In 4.0 series it is delegated to `Array#join`.
|
1077
|
+
*Roque Pinel*, *Christopher Dell*
|
922
1078
|
|
923
|
-
|
1079
|
+
* Fix state being carried over from previous transaction.
|
924
1080
|
|
925
|
-
|
1081
|
+
Considering the following example where `name` is a required attribute.
|
1082
|
+
Before we had `new_record?` returning `true` for a persisted record:
|
926
1083
|
|
927
|
-
|
928
|
-
|
929
|
-
|
930
|
-
|
931
|
-
value isn't included in the SQL anyway (at least, when dirty checking
|
932
|
-
is enabled.) The column's new value will now be logged as `<NULL binary data>`
|
933
|
-
to parallel the existing `<N bytes of binary data>` for non-nil values.
|
1084
|
+
author = Author.create! name: 'foo'
|
1085
|
+
author.name = nil
|
1086
|
+
author.save # => false
|
1087
|
+
author.new_record? # => true
|
934
1088
|
|
935
|
-
|
1089
|
+
Fixes #20824.
|
936
1090
|
|
937
|
-
*
|
938
|
-
in order to validate child associations with the same context.
|
1091
|
+
*Roque Pinel*
|
939
1092
|
|
940
|
-
|
1093
|
+
* Correctly ignore `mark_for_destruction` when `autosave` isn't set to `true`
|
1094
|
+
when validating associations.
|
941
1095
|
|
942
|
-
|
1096
|
+
Fixes #20882.
|
943
1097
|
|
944
|
-
*
|
1098
|
+
*Sean Griffin*
|
945
1099
|
|
946
|
-
|
947
|
-
|
1100
|
+
* Fix a bug where counter_cache doesn't always work with polymorphic
|
1101
|
+
relations.
|
948
1102
|
|
949
|
-
Fixes #
|
1103
|
+
Fixes #16407.
|
950
1104
|
|
951
|
-
*
|
1105
|
+
*Stefan Kanev*, *Sean Griffin*
|
952
1106
|
|
953
|
-
* Ensure
|
1107
|
+
* Ensure that cyclic associations with autosave don't cause duplicate errors
|
1108
|
+
to be added to the parent record.
|
954
1109
|
|
955
|
-
Fixes #
|
1110
|
+
Fixes #20874.
|
956
1111
|
|
957
|
-
*
|
1112
|
+
*Sean Griffin*
|
958
1113
|
|
959
|
-
*
|
1114
|
+
* Ensure that `ActionController::Parameters` can still be passed to nested
|
1115
|
+
attributes.
|
960
1116
|
|
961
|
-
|
1117
|
+
Fixes #20922.
|
962
1118
|
|
963
|
-
*
|
964
|
-
on Reflections. This causes a problem when rails loads fixtures, because it
|
965
|
-
uses the reflections to set database with fixtures.
|
1119
|
+
*Sean Griffin*
|
966
1120
|
|
967
|
-
|
1121
|
+
* Deprecate force association reload by passing a truthy argument to
|
1122
|
+
association method.
|
968
1123
|
|
969
|
-
|
1124
|
+
For collection association, you can call `#reload` on association proxy to
|
1125
|
+
force a reload:
|
970
1126
|
|
971
|
-
|
972
|
-
Additionally display a warning message to make the user aware.
|
1127
|
+
@user.posts.reload # Instead of @user.posts(true)
|
973
1128
|
|
974
|
-
|
1129
|
+
For singular association, you can call `#reload` on the parent object to
|
1130
|
+
clear its association cache then call the association method:
|
975
1131
|
|
976
|
-
|
977
|
-
different spellings of timestamps are treated the same.
|
1132
|
+
@user.reload.profile # Instead of @user.profile(true)
|
978
1133
|
|
979
|
-
|
1134
|
+
Passing a truthy argument to force association to reload will be removed in
|
1135
|
+
Rails 5.1.
|
980
1136
|
|
981
|
-
|
982
|
-
# => :datetime
|
983
|
-
mytimestamp.simplified_type('timestamp(6) without time zone')
|
984
|
-
# => also :datetime (previously would be :timestamp)
|
1137
|
+
*Prem Sichanugrist*
|
985
1138
|
|
986
|
-
|
1139
|
+
* Replaced `ActiveSupport::Concurrency::Latch` with `Concurrent::CountDownLatch`
|
1140
|
+
from the concurrent-ruby gem.
|
987
1141
|
|
988
|
-
*
|
1142
|
+
*Jerry D'Antonio*
|
989
1143
|
|
990
|
-
*
|
1144
|
+
* Fix through associations using scopes having the scope merged multiple
|
1145
|
+
times.
|
991
1146
|
|
992
|
-
Fixes #
|
1147
|
+
Fixes #20721.
|
1148
|
+
Fixes #20727.
|
993
1149
|
|
994
|
-
*
|
1150
|
+
*Sean Griffin*
|
995
1151
|
|
996
|
-
*
|
1152
|
+
* `ActiveRecord::Base.dump_schema_after_migration` applies migration tasks
|
1153
|
+
other than `db:migrate`. (eg. `db:rollback`, `db:migrate:dup`, ...)
|
997
1154
|
|
998
|
-
Fixes #
|
1155
|
+
Fixes #20743.
|
999
1156
|
|
1000
|
-
*
|
1157
|
+
*Yves Senn*
|
1001
1158
|
|
1002
|
-
*
|
1003
|
-
a scoped `has_many`.
|
1159
|
+
* Add alternate syntax to make `change_column_default` reversible.
|
1004
1160
|
|
1005
|
-
|
1006
|
-
|
1007
|
-
unexpectedly neglected.
|
1161
|
+
User can pass in `:from` and `:to` to make `change_column_default` command
|
1162
|
+
become reversible.
|
1008
1163
|
|
1009
|
-
|
1164
|
+
Example:
|
1010
1165
|
|
1011
|
-
|
1166
|
+
change_column_default :posts, :status, from: nil, to: "draft"
|
1167
|
+
change_column_default :users, :authorized, from: true, to: false
|
1012
1168
|
|
1013
|
-
*
|
1169
|
+
*Prem Sichanugrist*
|
1014
1170
|
|
1015
|
-
|
1171
|
+
* Prevent error when using `force_reload: true` on an unassigned polymorphic
|
1172
|
+
belongs_to association.
|
1016
1173
|
|
1017
|
-
|
1174
|
+
Fixes #20426.
|
1018
1175
|
|
1019
|
-
|
1176
|
+
*James Dabbs*
|
1020
1177
|
|
1021
|
-
|
1178
|
+
* Correctly raise `ActiveRecord::AssociationTypeMismatch` when assigning
|
1179
|
+
a wrong type to a namespaced association.
|
1022
1180
|
|
1023
|
-
|
1181
|
+
Fixes #20545.
|
1024
1182
|
|
1025
|
-
|
1183
|
+
*Diego Carrion*
|
1026
1184
|
|
1027
|
-
|
1185
|
+
* `validates_absence_of` respects `marked_for_destruction?`.
|
1028
1186
|
|
1029
|
-
|
1030
|
-
LIKE statement.
|
1187
|
+
Fixes #20449.
|
1031
1188
|
|
1032
|
-
|
1189
|
+
*Yves Senn*
|
1033
1190
|
|
1034
|
-
|
1035
|
-
def self.search(term)
|
1036
|
-
where("title LIKE ?", sanitize_sql_like(term))
|
1037
|
-
end
|
1038
|
-
end
|
1191
|
+
* Include the `Enumerable` module in `ActiveRecord::Relation`
|
1039
1192
|
|
1040
|
-
|
1041
|
-
# => Query looks like "... title LIKE '20\% \_reduction\_' ..."
|
1193
|
+
*Sean Griffin*, *bogdan*
|
1042
1194
|
|
1043
|
-
|
1195
|
+
* Use `Enumerable#sum` in `ActiveRecord::Relation` if a block is given.
|
1044
1196
|
|
1045
|
-
*
|
1197
|
+
*Sean Griffin*
|
1046
1198
|
|
1047
|
-
|
1199
|
+
* Let `WITH` queries (Common Table Expressions) be explainable.
|
1048
1200
|
|
1049
|
-
*
|
1201
|
+
*Vladimir Kochnev*
|
1050
1202
|
|
1051
|
-
*
|
1203
|
+
* Make `remove_index :table, :column` reversible.
|
1052
1204
|
|
1053
|
-
|
1205
|
+
*Yves Senn*
|
1054
1206
|
|
1055
|
-
|
1056
|
-
|
1057
|
-
Post.where(author_id: author.id) == author.posts
|
1058
|
-
# => true
|
1207
|
+
* Fixed an error which would occur in dirty checking when calling
|
1208
|
+
`update_attributes` from a getter.
|
1059
1209
|
|
1060
|
-
Fixes #
|
1210
|
+
Fixes #20531.
|
1061
1211
|
|
1062
|
-
*
|
1212
|
+
*Sean Griffin*
|
1063
1213
|
|
1064
|
-
*
|
1065
|
-
|
1214
|
+
* Make `remove_foreign_key` reversible. Any foreign key options must be
|
1215
|
+
specified, similar to `remove_column`.
|
1066
1216
|
|
1067
|
-
|
1217
|
+
*Aster Ryan*
|
1068
1218
|
|
1069
|
-
|
1070
|
-
AND `model`.`id` IN (1, 2, 3...)
|
1219
|
+
* Add `:_prefix` and `:_suffix` options to `enum` definition.
|
1071
1220
|
|
1072
|
-
|
1221
|
+
Fixes #17511, #17415.
|
1073
1222
|
|
1074
|
-
|
1223
|
+
*Igor Kapkov*
|
1075
1224
|
|
1076
|
-
|
1225
|
+
* Correctly handle decimal arrays with defaults in the schema dumper.
|
1077
1226
|
|
1078
|
-
|
1079
|
-
with `select`.
|
1227
|
+
Fixes #20515.
|
1080
1228
|
|
1081
|
-
|
1229
|
+
*Sean Griffin*, *jmondo*
|
1082
1230
|
|
1083
|
-
|
1231
|
+
* Deprecate the PostgreSQL `:point` type in favor of a new one which will return
|
1232
|
+
`Point` objects instead of an `Array`
|
1084
1233
|
|
1085
|
-
*
|
1234
|
+
*Sean Griffin*
|
1086
1235
|
|
1087
|
-
|
1236
|
+
* Ensure symbols passed to `ActiveRecord::Relation#select` are always treated
|
1237
|
+
as columns.
|
1088
1238
|
|
1089
|
-
|
1239
|
+
Fixes #20360.
|
1090
1240
|
|
1091
|
-
*
|
1092
|
-
unknown OIDs.
|
1241
|
+
*Sean Griffin*
|
1093
1242
|
|
1094
|
-
|
1243
|
+
* Do not set `sql_mode` if `strict: :default` is specified.
|
1095
1244
|
|
1096
|
-
|
1245
|
+
# config/database.yml
|
1246
|
+
production:
|
1247
|
+
adapter: mysql2
|
1248
|
+
database: foo_prod
|
1249
|
+
user: foo
|
1250
|
+
strict: :default
|
1097
1251
|
|
1098
|
-
*
|
1252
|
+
*Ryuta Kamizono*
|
1099
1253
|
|
1100
|
-
|
1254
|
+
* Allow proc defaults to be passed to the attributes API. See documentation
|
1255
|
+
for examples.
|
1101
1256
|
|
1102
|
-
*
|
1257
|
+
*Sean Griffin*, *Kir Shatrov*
|
1103
1258
|
|
1104
|
-
*
|
1259
|
+
* SQLite: `:collation` support for string and text columns.
|
1105
1260
|
|
1106
|
-
|
1261
|
+
Example:
|
1107
1262
|
|
1108
|
-
|
1263
|
+
create_table :foo do |t|
|
1264
|
+
t.string :string_nocase, collation: 'NOCASE'
|
1265
|
+
t.text :text_rtrim, collation: 'RTRIM'
|
1266
|
+
end
|
1109
1267
|
|
1110
|
-
|
1111
|
-
same name in an unrelated class.
|
1268
|
+
add_column :foo, :title, :string, collation: 'RTRIM'
|
1112
1269
|
|
1113
|
-
|
1270
|
+
change_column :foo, :title, :string, collation: 'NOCASE'
|
1114
1271
|
|
1115
|
-
*
|
1272
|
+
*Akshay Vishnoi*
|
1116
1273
|
|
1117
|
-
*
|
1274
|
+
* Allow the use of symbols or strings to specify enum values in test
|
1275
|
+
fixtures:
|
1118
1276
|
|
1119
|
-
|
1277
|
+
awdr:
|
1278
|
+
title: "Agile Web Development with Rails"
|
1279
|
+
status: :proposed
|
1120
1280
|
|
1121
|
-
*
|
1281
|
+
*George Claghorn*
|
1122
1282
|
|
1123
|
-
*
|
1283
|
+
* Clear query cache when `ActiveRecord::Base#reload` is called.
|
1124
1284
|
|
1125
|
-
|
1285
|
+
*Shane Hender, Pierre Nespo*
|
1126
1286
|
|
1127
|
-
|
1287
|
+
* Include stored procedures and function on the MySQL structure dump.
|
1128
1288
|
|
1129
|
-
*
|
1130
|
-
could previously have incorrectly accrued additional conditions (e.g. as a result of
|
1131
|
-
a previous query). `CollectionProxy` now always defers to the association scope's
|
1132
|
-
`arel` method so the (incorrect) inherited one should be entirely concealed.
|
1289
|
+
*Jonathan Worek*
|
1133
1290
|
|
1134
|
-
|
1291
|
+
* Pass `:extend` option for `has_and_belongs_to_many` associations to the
|
1292
|
+
underlying `has_many :through`.
|
1135
1293
|
|
1136
|
-
*
|
1294
|
+
*Jaehyun Shin*
|
1137
1295
|
|
1138
|
-
*
|
1296
|
+
* Deprecate `Relation#uniq` use `Relation#distinct` instead.
|
1139
1297
|
|
1140
|
-
|
1298
|
+
See #9683.
|
1141
1299
|
|
1142
|
-
|
1300
|
+
*Yves Senn*
|
1143
1301
|
|
1144
|
-
|
1302
|
+
* Allow single table inheritance instantiation to work when storing
|
1303
|
+
demodulized class names.
|
1145
1304
|
|
1146
|
-
*
|
1305
|
+
*Alex Robbin*
|
1147
1306
|
|
1148
|
-
|
1307
|
+
* Correctly pass MySQL options when using `structure_dump` or
|
1308
|
+
`structure_load`.
|
1149
1309
|
|
1150
|
-
|
1310
|
+
Specifically, it fixes an issue when using SSL authentication.
|
1151
1311
|
|
1152
|
-
*
|
1153
|
-
deprecated in 4.1) from relative to absolute.
|
1312
|
+
*Alex Coomans*
|
1154
1313
|
|
1155
|
-
|
1156
|
-
`sqlite3:///my/path` with `sqlite3:my/path`.
|
1314
|
+
* Correctly dump `:options` on `create_table` for MySQL.
|
1157
1315
|
|
1158
|
-
*
|
1316
|
+
*Ryuta Kamizono*
|
1159
1317
|
|
1160
|
-
*
|
1318
|
+
* PostgreSQL: `:collation` support for string and text columns.
|
1161
1319
|
|
1162
1320
|
Example:
|
1163
1321
|
|
1164
|
-
|
1322
|
+
create_table :foos do |t|
|
1323
|
+
t.string :string_en, collation: 'en_US.UTF-8'
|
1324
|
+
t.text :text_ja, collation: 'ja_JP.UTF-8'
|
1325
|
+
end
|
1165
1326
|
|
1166
|
-
*
|
1327
|
+
*Ryuta Kamizono*
|
1167
1328
|
|
1168
|
-
*
|
1329
|
+
* Remove `ActiveRecord::Serialization::XmlSerializer` from core.
|
1169
1330
|
|
1170
|
-
*
|
1331
|
+
*Zachary Scott*
|
1171
1332
|
|
1172
|
-
*
|
1333
|
+
* Make `unscope` aware of "less than" and "greater than" conditions.
|
1173
1334
|
|
1174
|
-
*
|
1335
|
+
*TAKAHASHI Kazuaki*
|
1175
1336
|
|
1176
|
-
*
|
1177
|
-
|
1178
|
-
`nil` as type but `enum`.
|
1337
|
+
* `find_by` and `find_by!` raise `ArgumentError` when called without
|
1338
|
+
arguments.
|
1179
1339
|
|
1180
|
-
|
1340
|
+
*Kohei Suzuki*
|
1341
|
+
|
1342
|
+
* Revert behavior of `db:schema:load` back to loading the full
|
1343
|
+
environment. This ensures that initializers are run.
|
1344
|
+
|
1345
|
+
Fixes #19545.
|
1181
1346
|
|
1182
1347
|
*Yves Senn*
|
1183
1348
|
|
1184
|
-
* Fix
|
1185
|
-
column.
|
1349
|
+
* Fix missing index when using `timestamps` with the `index` option.
|
1186
1350
|
|
1187
|
-
|
1351
|
+
The `index` option used with `timestamps` should be passed to both
|
1352
|
+
`column` definitions for `created_at` and `updated_at` rather than just
|
1353
|
+
the first.
|
1188
1354
|
|
1189
|
-
*
|
1355
|
+
*Paul Mucur*
|
1190
1356
|
|
1191
|
-
*
|
1192
|
-
custom primary key that did not save due to validation error.
|
1357
|
+
* Rename `:class` to `:anonymous_class` in association options.
|
1193
1358
|
|
1194
|
-
Fixes #
|
1359
|
+
Fixes #19659.
|
1195
1360
|
|
1196
|
-
*
|
1361
|
+
*Andrew White*
|
1197
1362
|
|
1198
|
-
*
|
1363
|
+
* Autosave existing records on a has many through association when the parent
|
1364
|
+
is new.
|
1199
1365
|
|
1200
|
-
|
1366
|
+
Fixes #19782.
|
1201
1367
|
|
1202
|
-
*
|
1368
|
+
*Sean Griffin*
|
1203
1369
|
|
1204
|
-
*
|
1370
|
+
* Fixed a bug where uniqueness validations would error on out of range values,
|
1371
|
+
even if an validation should have prevented it from hitting the database.
|
1205
1372
|
|
1206
|
-
|
1207
|
-
would commit the transaction.
|
1373
|
+
*Andrey Voronkov*
|
1208
1374
|
|
1209
|
-
|
1210
|
-
required.
|
1375
|
+
* MySQL: `:charset` and `:collation` support for string and text columns.
|
1211
1376
|
|
1212
1377
|
Example:
|
1213
1378
|
|
1214
|
-
create_table :
|
1215
|
-
t.
|
1379
|
+
create_table :foos do |t|
|
1380
|
+
t.string :string_utf8_bin, charset: 'utf8', collation: 'utf8_bin'
|
1381
|
+
t.text :text_ascii, charset: 'ascii'
|
1216
1382
|
end
|
1217
|
-
# => CREATE TEMPORARY TABLE temp (INDEX (zip)) AS SELECT id, name, zip FROM a_really_complicated_query
|
1218
|
-
|
1219
|
-
*Cody Cutrer*, *Steve Rice*, *Rafael Mendonça Franca*
|
1220
1383
|
|
1221
|
-
*
|
1222
|
-
`ActiveRecord::Base.pluralize_table_names` is `false`.
|
1223
|
-
|
1224
|
-
Fixes #13426.
|
1384
|
+
*Ryuta Kamizono*
|
1225
1385
|
|
1226
|
-
|
1386
|
+
* Foreign key related methods in the migration DSL respect
|
1387
|
+
`ActiveRecord::Base.pluralize_table_names = false`.
|
1227
1388
|
|
1228
|
-
|
1389
|
+
Fixes #19643.
|
1229
1390
|
|
1230
|
-
|
1391
|
+
*Mehmet Emin İNAÇ*
|
1231
1392
|
|
1232
|
-
|
1233
|
-
Photo.last.touch(:signed_at, :sealed_at)
|
1393
|
+
* Reduce memory usage from loading types on PostgreSQL.
|
1234
1394
|
|
1235
|
-
|
1395
|
+
Fixes #19578.
|
1236
1396
|
|
1237
|
-
*
|
1238
|
-
migration table exists.
|
1397
|
+
*Sean Griffin*
|
1239
1398
|
|
1240
|
-
|
1399
|
+
* Add `config.active_record.warn_on_records_fetched_greater_than` option.
|
1241
1400
|
|
1242
|
-
|
1401
|
+
When set to an integer, a warning will be logged whenever a result set
|
1402
|
+
larger than the specified size is returned by a query.
|
1243
1403
|
|
1244
|
-
|
1245
|
-
of waiting until they disconnect by themselves. Before this change,
|
1246
|
-
a suitably constructed series of short-lived threads could starve
|
1247
|
-
the connection pool, without ever having more than a couple alive at
|
1248
|
-
the same time.
|
1404
|
+
Fixes #16463.
|
1249
1405
|
|
1250
|
-
*
|
1406
|
+
*Jason Nochlin*
|
1251
1407
|
|
1252
|
-
* `
|
1253
|
-
pointing to pg_class, and thus only sequence objects, are considered.
|
1408
|
+
* Ignore `.psqlrc` when loading database structure.
|
1254
1409
|
|
1255
|
-
*
|
1410
|
+
*Jason Weathered*
|
1256
1411
|
|
1257
|
-
*
|
1412
|
+
* Fix referencing wrong table aliases while joining tables of has many through
|
1413
|
+
association (only when calling calculation methods).
|
1258
1414
|
|
1259
|
-
Fixes #
|
1415
|
+
Fixes #19276.
|
1260
1416
|
|
1261
|
-
*
|
1417
|
+
*pinglamb*
|
1262
1418
|
|
1263
|
-
*
|
1419
|
+
* Correctly persist a serialized attribute that has been returned to
|
1420
|
+
its default value by an in-place modification.
|
1264
1421
|
|
1265
|
-
|
1422
|
+
Fixes #19467.
|
1266
1423
|
|
1267
|
-
|
1268
|
-
email: $LABEL@email.com
|
1424
|
+
*Matthew Draper*
|
1269
1425
|
|
1270
|
-
|
1426
|
+
* Fix generating the schema file when using PostgreSQL `BigInt[]` data type.
|
1427
|
+
Previously the `limit: 8` was not coming through, and this caused it to
|
1428
|
+
become `Int[]` data type after rebuilding from the schema.
|
1271
1429
|
|
1272
|
-
|
1430
|
+
Fixes #19420.
|
1273
1431
|
|
1274
|
-
*
|
1432
|
+
*Jake Waller*
|
1275
1433
|
|
1276
|
-
|
1434
|
+
* Reuse the `CollectionAssociation#reader` cache when the foreign key is
|
1435
|
+
available prior to save.
|
1277
1436
|
|
1278
|
-
*
|
1437
|
+
*Ben Woosley*
|
1279
1438
|
|
1280
|
-
*
|
1281
|
-
|
1439
|
+
* Add `config.active_record.dump_schemas` to fix `db:structure:dump`
|
1440
|
+
when using schema_search_path and PostgreSQL extensions.
|
1282
1441
|
|
1283
|
-
|
1442
|
+
Fixes #17157.
|
1284
1443
|
|
1285
|
-
*
|
1286
|
-
has a case insensitive collation.
|
1444
|
+
*Ryan Wallace*
|
1287
1445
|
|
1288
|
-
|
1446
|
+
* Renaming `use_transactional_fixtures` to `use_transactional_tests` for clarity.
|
1289
1447
|
|
1290
|
-
|
1448
|
+
Fixes #18864.
|
1291
1449
|
|
1292
|
-
*
|
1450
|
+
*Brandon Weiss*
|
1293
1451
|
|
1294
|
-
*
|
1295
|
-
|
1452
|
+
* Increase pg gem version requirement to `~> 0.18`. Earlier versions of the
|
1453
|
+
pg gem are known to have problems with Ruby 2.2.
|
1296
1454
|
|
1297
|
-
*
|
1455
|
+
*Matt Brictson*
|
1298
1456
|
|
1299
|
-
*
|
1300
|
-
Previously after save related callbacks, such as `#after_commit`, were triggered when the has_one
|
1301
|
-
object did not get saved to the db.
|
1457
|
+
* Correctly dump `serial` and `bigserial`.
|
1302
1458
|
|
1303
|
-
*
|
1459
|
+
*Ryuta Kamizono*
|
1304
1460
|
|
1305
|
-
*
|
1461
|
+
* Fix default `format` value in `ActiveRecord::Tasks::DatabaseTasks#schema_file`.
|
1306
1462
|
|
1307
|
-
|
1463
|
+
*James Cox*
|
1308
1464
|
|
1309
|
-
|
1465
|
+
* Don't enroll records in the transaction if they don't have commit callbacks.
|
1466
|
+
This was causing a memory leak when creating many records inside a transaction.
|
1310
1467
|
|
1311
|
-
|
1468
|
+
Fixes #15549.
|
1312
1469
|
|
1313
|
-
*
|
1314
|
-
warnings on enum columns.
|
1470
|
+
*Will Bryant*, *Aaron Patterson*
|
1315
1471
|
|
1316
|
-
|
1472
|
+
* Correctly create through records when created on a has many through
|
1473
|
+
association when using `where`.
|
1317
1474
|
|
1318
|
-
|
1319
|
-
joins are involved.
|
1475
|
+
Fixes #19073.
|
1320
1476
|
|
1321
|
-
|
1477
|
+
*Sean Griffin*
|
1322
1478
|
|
1323
|
-
|
1479
|
+
* Add `SchemaMigration.create_table` support for any unicode charsets with MySQL.
|
1324
1480
|
|
1325
|
-
*
|
1326
|
-
any enum attribute is always evaluated as 0 during uniqueness validation.
|
1481
|
+
*Ryuta Kamizono*
|
1327
1482
|
|
1328
|
-
|
1483
|
+
* PostgreSQL no longer disables user triggers if system triggers can't be
|
1484
|
+
disabled. Disabling user triggers does not fulfill what the method promises.
|
1485
|
+
Rails currently requires superuser privileges for this method.
|
1329
1486
|
|
1330
|
-
|
1487
|
+
If you absolutely rely on this behavior, consider patching
|
1488
|
+
`disable_referential_integrity`.
|
1331
1489
|
|
1332
|
-
*
|
1333
|
-
`has_and_belongs_to_many` associations *and* on `has_many :through`
|
1334
|
-
associations. Before this change, `before_add` callbacks would be fired
|
1335
|
-
before the record was saved on `has_and_belongs_to_many` associations, but
|
1336
|
-
*not* on `has_many :through` associations.
|
1490
|
+
*Yves Senn*
|
1337
1491
|
|
1338
|
-
|
1492
|
+
* Restore aborted transaction state when `disable_referential_integrity` fails
|
1493
|
+
due to missing permissions.
|
1339
1494
|
|
1340
|
-
*
|
1341
|
-
private method defined on its ancestors.
|
1495
|
+
*Toby Ovod-Everett*, *Yves Senn*
|
1342
1496
|
|
1343
|
-
|
1497
|
+
* In PostgreSQL, print a warning message if `disable_referential_integrity`
|
1498
|
+
fails due to missing permissions.
|
1344
1499
|
|
1345
|
-
*
|
1500
|
+
*Andrey Nering*, *Yves Senn*
|
1346
1501
|
|
1347
|
-
*
|
1502
|
+
* Allow a `:limit` option for MySQL bigint primary key support.
|
1348
1503
|
|
1349
1504
|
Example:
|
1350
1505
|
|
1351
|
-
|
1352
|
-
|
1353
|
-
|
1506
|
+
create_table :foos, id: :primary_key, limit: 8 do |t|
|
1507
|
+
end
|
1508
|
+
|
1509
|
+
# or
|
1510
|
+
|
1511
|
+
create_table :foos, id: false do |t|
|
1512
|
+
t.primary_key :id, limit: 8
|
1513
|
+
end
|
1514
|
+
|
1515
|
+
*Ryuta Kamizono*
|
1516
|
+
|
1517
|
+
* `belongs_to` will now trigger a validation error by default if the association is not present.
|
1518
|
+
You can turn this off on a per-association basis with `optional: true`.
|
1519
|
+
(Note this new default only applies to new Rails apps that will be generated with
|
1520
|
+
`config.active_record.belongs_to_required_by_default = true` in initializer.)
|
1521
|
+
|
1522
|
+
*Josef Šimánek*
|
1523
|
+
|
1524
|
+
* Fixed `ActiveRecord::Relation#becomes!` and `changed_attributes` issues for type
|
1525
|
+
columns.
|
1526
|
+
|
1527
|
+
Fixes #17139.
|
1528
|
+
|
1529
|
+
*Miklos Fazekas*
|
1530
|
+
|
1531
|
+
* Format the time string according to the precision of the time column.
|
1532
|
+
|
1533
|
+
*Ryuta Kamizono*
|
1534
|
+
|
1535
|
+
* Allow a `:precision` option for time type columns.
|
1536
|
+
|
1537
|
+
*Ryuta Kamizono*
|
1538
|
+
|
1539
|
+
* Add `ActiveRecord::Base.suppress` to prevent the receiver from being saved
|
1540
|
+
during the given block.
|
1541
|
+
|
1542
|
+
For example, here's a pattern of creating notifications when new comments
|
1543
|
+
are posted. (The notification may in turn trigger an email, a push
|
1544
|
+
notification, or just appear in the UI somewhere):
|
1545
|
+
|
1546
|
+
class Comment < ActiveRecord::Base
|
1547
|
+
belongs_to :commentable, polymorphic: true
|
1548
|
+
after_create -> { Notification.create! comment: self,
|
1549
|
+
recipients: commentable.recipients }
|
1550
|
+
end
|
1551
|
+
|
1552
|
+
That's what you want the bulk of the time. A new comment creates a new
|
1553
|
+
Notification. There may be edge cases where you don't want that, like
|
1554
|
+
when copying a commentable and its comments, in which case write a
|
1555
|
+
concern with something like this:
|
1556
|
+
|
1557
|
+
module Copyable
|
1558
|
+
def copy_to(destination)
|
1559
|
+
Notification.suppress do
|
1560
|
+
# Copy logic that creates new comments that we do not want triggering
|
1561
|
+
# notifications.
|
1562
|
+
end
|
1563
|
+
end
|
1564
|
+
end
|
1565
|
+
|
1566
|
+
*Michael Ryan*
|
1567
|
+
|
1568
|
+
* `:time` option added for `#touch`.
|
1569
|
+
|
1570
|
+
Fixes #18905.
|
1571
|
+
|
1572
|
+
*Hyonjee Joo*
|
1573
|
+
|
1574
|
+
* Add `foreign_key_exists?` method.
|
1575
|
+
|
1576
|
+
*Tõnis Simo*
|
1577
|
+
|
1578
|
+
* Use SQL COUNT and LIMIT 1 queries for `none?` and `one?` methods
|
1579
|
+
if no block or limit is given, instead of loading the entire
|
1580
|
+
collection into memory. This applies to relations (e.g. `User.all`)
|
1581
|
+
as well as associations (e.g. `account.users`)
|
1582
|
+
|
1583
|
+
# Before:
|
1584
|
+
|
1585
|
+
users.none?
|
1586
|
+
# SELECT "users".* FROM "users"
|
1587
|
+
|
1588
|
+
users.one?
|
1589
|
+
# SELECT "users".* FROM "users"
|
1590
|
+
|
1591
|
+
# After:
|
1592
|
+
|
1593
|
+
users.none?
|
1594
|
+
# SELECT 1 AS one FROM "users" LIMIT 1
|
1595
|
+
|
1596
|
+
users.one?
|
1597
|
+
# SELECT COUNT(*) FROM "users"
|
1598
|
+
|
1599
|
+
*Eugene Gilburg*
|
1600
|
+
|
1601
|
+
* Have `enum` perform type casting consistently with the rest of Active
|
1602
|
+
Record, such as `where`.
|
1603
|
+
|
1604
|
+
*Sean Griffin*
|
1605
|
+
|
1606
|
+
* `scoping` no longer pollutes the current scope of sibling classes when using
|
1607
|
+
STI.
|
1608
|
+
|
1609
|
+
Fixes #18806.
|
1610
|
+
|
1611
|
+
Example:
|
1612
|
+
|
1613
|
+
StiOne.none.scoping do
|
1614
|
+
StiTwo.all
|
1615
|
+
end
|
1616
|
+
|
1617
|
+
|
1618
|
+
*Sean Griffin*
|
1619
|
+
|
1620
|
+
* `remove_reference` with `foreign_key: true` removes the foreign key before
|
1621
|
+
removing the column. This fixes a bug where it was not possible to remove
|
1622
|
+
the column on MySQL.
|
1623
|
+
|
1624
|
+
Fixes #18664.
|
1625
|
+
|
1626
|
+
*Yves Senn*
|
1627
|
+
|
1628
|
+
* `find_in_batches` now accepts an `:finish` parameter that complements the `:start`
|
1629
|
+
parameter to specify where to stop batch processing.
|
1630
|
+
|
1631
|
+
*Vipul A M*
|
1632
|
+
|
1633
|
+
* Fix a rounding problem for PostgreSQL timestamp columns.
|
1634
|
+
|
1635
|
+
If a timestamp column has a precision specified, it needs to
|
1636
|
+
format according to that.
|
1637
|
+
|
1638
|
+
*Ryuta Kamizono*
|
1639
|
+
|
1640
|
+
* Respect the database default charset for `schema_migrations` table.
|
1641
|
+
|
1642
|
+
The charset of `version` column in `schema_migrations` table depends
|
1643
|
+
on the database default charset and collation rather than the encoding
|
1644
|
+
of the connection.
|
1645
|
+
|
1646
|
+
*Ryuta Kamizono*
|
1647
|
+
|
1648
|
+
* Raise `ArgumentError` when passing `nil` or `false` to `Relation#merge`.
|
1649
|
+
|
1650
|
+
These are not valid values to merge in a relation, so it should warn users
|
1651
|
+
early.
|
1652
|
+
|
1653
|
+
*Rafael Mendonça França*
|
1654
|
+
|
1655
|
+
* Use `SCHEMA` instead of `DB_STRUCTURE` for specifying a structure file.
|
1656
|
+
|
1657
|
+
This makes the `db:structure` tasks consistent with `test:load_structure`.
|
1658
|
+
|
1659
|
+
*Dieter Komendera*
|
1660
|
+
|
1661
|
+
* Respect custom primary keys for associations when calling `Relation#where`
|
1662
|
+
|
1663
|
+
Fixes #18813.
|
1664
|
+
|
1665
|
+
*Sean Griffin*
|
1666
|
+
|
1667
|
+
* Fix several edge cases which could result in a counter cache updating
|
1668
|
+
twice or not updating at all for `has_many` and `has_many :through`.
|
1669
|
+
|
1670
|
+
Fixes #10865.
|
1671
|
+
|
1672
|
+
*Sean Griffin*
|
1673
|
+
|
1674
|
+
* Foreign keys added by migrations were given random, generated names. This
|
1675
|
+
meant a different `structure.sql` would be generated every time a developer
|
1676
|
+
ran migrations on their machine.
|
1677
|
+
|
1678
|
+
The generated part of foreign key names is now a hash of the table name and
|
1679
|
+
column name, which is consistent every time you run the migration.
|
1680
|
+
|
1681
|
+
*Chris Sinjakli*
|
1682
|
+
|
1683
|
+
* Fix n+1 query problem when eager loading nil associations (fixes #18312)
|
1684
|
+
|
1685
|
+
*Sammy Larbi*
|
1686
|
+
|
1687
|
+
* Change the default error message from `can't be blank` to `must exist` for
|
1688
|
+
the presence validator of the `:required` option on `belongs_to`/`has_one`
|
1689
|
+
associations.
|
1690
|
+
|
1691
|
+
*Henrik Nygren*
|
1692
|
+
|
1693
|
+
* Fixed `ActiveRecord::Relation#group` method when an argument is an SQL
|
1694
|
+
reserved keyword:
|
1695
|
+
|
1696
|
+
Example:
|
1697
|
+
|
1698
|
+
SplitTest.group(:key).count
|
1699
|
+
Property.group(:value).count
|
1700
|
+
|
1701
|
+
*Bogdan Gusiev*
|
1702
|
+
|
1703
|
+
* Added the `#or` method on `ActiveRecord::Relation`, allowing use of the OR
|
1704
|
+
operator to combine WHERE or HAVING clauses.
|
1705
|
+
|
1706
|
+
Example:
|
1707
|
+
|
1708
|
+
Post.where('id = 1').or(Post.where('id = 2'))
|
1709
|
+
# => SELECT * FROM posts WHERE (id = 1) OR (id = 2)
|
1710
|
+
|
1711
|
+
*Sean Griffin*, *Matthew Draper*, *Gael Muller*, *Olivier El Mekki*
|
1712
|
+
|
1713
|
+
* Don't define autosave association callbacks twice from
|
1714
|
+
`accepts_nested_attributes_for`.
|
1715
|
+
|
1716
|
+
Fixes #18704.
|
1717
|
+
|
1718
|
+
*Sean Griffin*
|
1719
|
+
|
1720
|
+
* Integer types will no longer raise a `RangeError` when assigning an
|
1721
|
+
attribute, but will instead raise when going to the database.
|
1722
|
+
|
1723
|
+
Fixes several vague issues which were never reported directly. See the
|
1724
|
+
commit message from the commit which added this line for some examples.
|
1725
|
+
|
1726
|
+
*Sean Griffin*
|
1727
|
+
|
1728
|
+
* Values which would error while being sent to the database (such as an
|
1729
|
+
ASCII-8BIT string with invalid UTF-8 bytes on SQLite3), no longer error on
|
1730
|
+
assignment. They will still error when sent to the database, but you are
|
1731
|
+
given the ability to re-assign it to a valid value.
|
1732
|
+
|
1733
|
+
Fixes #18580.
|
1734
|
+
|
1735
|
+
*Sean Griffin*
|
1736
|
+
|
1737
|
+
* Don't remove join dependencies in `Relation#exists?`
|
1738
|
+
|
1739
|
+
Fixes #18632.
|
1740
|
+
|
1741
|
+
*Sean Griffin*
|
1742
|
+
|
1743
|
+
* Invalid values assigned to a JSON column are assumed to be `nil`.
|
1744
|
+
|
1745
|
+
Fixes #18629.
|
1746
|
+
|
1747
|
+
*Sean Griffin*
|
1748
|
+
|
1749
|
+
* Add `ActiveRecord::Base#accessed_fields`, which can be used to quickly
|
1750
|
+
discover which fields were read from a model when you are looking to only
|
1751
|
+
select the data you need from the database.
|
1752
|
+
|
1753
|
+
*Sean Griffin*
|
1754
|
+
|
1755
|
+
* Introduce the `:if_exists` option for `drop_table`.
|
1756
|
+
|
1757
|
+
Example:
|
1758
|
+
|
1759
|
+
drop_table(:posts, if_exists: true)
|
1760
|
+
|
1761
|
+
That would execute:
|
1762
|
+
|
1763
|
+
DROP TABLE IF EXISTS posts
|
1764
|
+
|
1765
|
+
If the table doesn't exist, `if_exists: false` (the default) raises an
|
1766
|
+
exception whereas `if_exists: true` does nothing.
|
1767
|
+
|
1768
|
+
*Cody Cutrer*, *Stefan Kanev*, *Ryuta Kamizono*
|
1769
|
+
|
1770
|
+
* Don't run SQL if attribute value is not changed for update_attribute method.
|
1771
|
+
|
1772
|
+
*Prathamesh Sonpatki*
|
1773
|
+
|
1774
|
+
* `time` columns can now get affected by `time_zone_aware_attributes`. If you have
|
1775
|
+
set `config.time_zone` to a value other than `'UTC'`, they will be treated
|
1776
|
+
as in that time zone by default in Rails 5.1. If this is not the desired
|
1777
|
+
behavior, you can set
|
1778
|
+
|
1779
|
+
ActiveRecord::Base.time_zone_aware_types = [:datetime]
|
1780
|
+
|
1781
|
+
A deprecation warning will be emitted if you have a `:time` column, and have
|
1782
|
+
not explicitly opted out.
|
1783
|
+
|
1784
|
+
Fixes #3145.
|
1785
|
+
|
1786
|
+
*Sean Griffin*
|
1787
|
+
|
1788
|
+
* Tests now run after_commit callbacks. You no longer have to declare
|
1789
|
+
`uses_transaction ‘test name’` to test the results of an after_commit.
|
1790
|
+
|
1791
|
+
after_commit callbacks run after committing a transaction whose parent
|
1792
|
+
is not `joinable?`: un-nested transactions, transactions within test cases,
|
1793
|
+
and transactions in `console --sandbox`.
|
1794
|
+
|
1795
|
+
*arthurnn*, *Ravil Bayramgalin*, *Matthew Draper*
|
1796
|
+
|
1797
|
+
* `nil` as a value for a binary column in a query no longer logs as
|
1798
|
+
"<NULL binary data>", and instead logs as just "nil".
|
1799
|
+
|
1800
|
+
*Sean Griffin*
|
1801
|
+
|
1802
|
+
* `attribute_will_change!` will no longer cause non-persistable attributes to
|
1803
|
+
be sent to the database.
|
1804
|
+
|
1805
|
+
Fixes #18407.
|
1806
|
+
|
1807
|
+
*Sean Griffin*
|
1808
|
+
|
1809
|
+
* Remove support for the `protected_attributes` gem.
|
1810
|
+
|
1811
|
+
*Carlos Antonio da Silva*, *Roberto Miranda*
|
1812
|
+
|
1813
|
+
* Fix accessing of fixtures having non-string labels like Fixnum.
|
1814
|
+
|
1815
|
+
*Prathamesh Sonpatki*
|
1816
|
+
|
1817
|
+
* Remove deprecated support to preload instance-dependent associations.
|
1354
1818
|
|
1355
1819
|
*Yves Senn*
|
1356
1820
|
|
1357
|
-
*
|
1358
|
-
We currently map PostgreSQL ranges to Ruby ranges. This conversion is not fully
|
1359
|
-
possible because the Ruby range does not support excluded beginnings.
|
1821
|
+
* Remove deprecated support for PostgreSQL ranges with exclusive lower bounds.
|
1360
1822
|
|
1361
|
-
|
1362
|
-
|
1363
|
-
|
1364
|
-
|
1823
|
+
*Yves Senn*
|
1824
|
+
|
1825
|
+
* Remove deprecation when modifying a relation with cached Arel.
|
1826
|
+
This raises an `ImmutableRelation` error instead.
|
1365
1827
|
|
1366
1828
|
*Yves Senn*
|
1367
1829
|
|
1368
|
-
*
|
1830
|
+
* Added `ActiveRecord::SecureToken` in order to encapsulate generation of
|
1831
|
+
unique tokens for attributes in a model using `SecureRandom`.
|
1832
|
+
|
1833
|
+
*Roberto Miranda*
|
1834
|
+
|
1835
|
+
* Change the behavior of boolean columns to be closer to Ruby's semantics.
|
1836
|
+
|
1837
|
+
Before this change we had a small set of "truthy", and all others are "falsy".
|
1838
|
+
|
1839
|
+
Now, we have a small set of "falsy" values and all others are "truthy" matching
|
1840
|
+
Ruby's semantics.
|
1841
|
+
|
1842
|
+
*Rafael Mendonça França*
|
1843
|
+
|
1844
|
+
* Deprecate `ActiveRecord::Base.errors_in_transactional_callbacks=`.
|
1845
|
+
|
1846
|
+
*Rafael Mendonça França*
|
1847
|
+
|
1848
|
+
* Change transaction callbacks to not swallow errors.
|
1849
|
+
|
1850
|
+
Before this change any errors raised inside a transaction callback
|
1851
|
+
were getting rescued and printed in the logs.
|
1852
|
+
|
1853
|
+
Now these errors are not rescued anymore and just bubble up, as the other callbacks.
|
1854
|
+
|
1855
|
+
*Rafael Mendonça França*
|
1856
|
+
|
1857
|
+
* Remove deprecated `sanitize_sql_hash_for_conditions`.
|
1858
|
+
|
1859
|
+
*Rafael Mendonça França*
|
1860
|
+
|
1861
|
+
* Remove deprecated `Reflection#source_macro`.
|
1862
|
+
|
1863
|
+
*Rafael Mendonça França*
|
1864
|
+
|
1865
|
+
* Remove deprecated `symbolized_base_class` and `symbolized_sti_name`.
|
1866
|
+
|
1867
|
+
*Rafael Mendonça França*
|
1868
|
+
|
1869
|
+
* Remove deprecated `ActiveRecord::Base.disable_implicit_join_references=`.
|
1870
|
+
|
1871
|
+
*Rafael Mendonça França*
|
1872
|
+
|
1873
|
+
* Remove deprecated access to connection specification using a string accessor.
|
1874
|
+
|
1875
|
+
Now all strings will be handled as a URL.
|
1876
|
+
|
1877
|
+
*Rafael Mendonça França*
|
1878
|
+
|
1879
|
+
* Change the default `null` value for `timestamps` to `false`.
|
1880
|
+
|
1881
|
+
*Rafael Mendonça França*
|
1882
|
+
|
1883
|
+
* Return an array of pools from `connection_pools`.
|
1884
|
+
|
1885
|
+
*Rafael Mendonça França*
|
1886
|
+
|
1887
|
+
* Return a null column from `column_for_attribute` when no column exists.
|
1888
|
+
|
1889
|
+
*Rafael Mendonça França*
|
1890
|
+
|
1891
|
+
* Remove deprecated `serialized_attributes`.
|
1892
|
+
|
1893
|
+
*Rafael Mendonça França*
|
1894
|
+
|
1895
|
+
* Remove deprecated automatic counter caches on `has_many :through`.
|
1896
|
+
|
1897
|
+
*Rafael Mendonça França*
|
1898
|
+
|
1899
|
+
* Change the way in which callback chains can be halted.
|
1900
|
+
|
1901
|
+
The preferred method to halt a callback chain from now on is to explicitly
|
1902
|
+
`throw(:abort)`.
|
1903
|
+
In the past, returning `false` in an Active Record `before_` callback had the
|
1904
|
+
side effect of halting the callback chain.
|
1905
|
+
This is not recommended anymore and, depending on the value of the
|
1906
|
+
`ActiveSupport.halt_callback_chains_on_return_false` option, will
|
1907
|
+
either not work at all or display a deprecation warning.
|
1908
|
+
|
1909
|
+
*claudiob*
|
1910
|
+
|
1911
|
+
* Clear query cache on rollback.
|
1912
|
+
|
1913
|
+
*Florian Weingarten*
|
1914
|
+
|
1915
|
+
* Fix setting of foreign_key for through associations when building a new record.
|
1916
|
+
|
1917
|
+
Fixes #12698.
|
1918
|
+
|
1919
|
+
*Ivan Antropov*
|
1920
|
+
|
1921
|
+
* Improve dumping of the primary key. If it is not a default primary key,
|
1922
|
+
correctly dump the type and options.
|
1923
|
+
|
1924
|
+
Fixes #14169, #16599.
|
1925
|
+
|
1926
|
+
*Ryuta Kamizono*
|
1927
|
+
|
1928
|
+
* Format the datetime string according to the precision of the datetime field.
|
1929
|
+
|
1930
|
+
Incompatible to rounding behavior between MySQL 5.6 and earlier.
|
1931
|
+
|
1932
|
+
In 5.5, when you insert `2014-08-17 12:30:00.999999` the fractional part
|
1933
|
+
is ignored. In 5.6, it's rounded to `2014-08-17 12:30:01`:
|
1934
|
+
|
1935
|
+
http://bugs.mysql.com/bug.php?id=68760
|
1936
|
+
|
1937
|
+
*Ryuta Kamizono*
|
1938
|
+
|
1939
|
+
* Allow a precision option for MySQL datetimes.
|
1940
|
+
|
1941
|
+
*Ryuta Kamizono*
|
1942
|
+
|
1943
|
+
* Fixed automatic `inverse_of` for models nested in a module.
|
1944
|
+
|
1945
|
+
*Andrew McCloud*
|
1946
|
+
|
1947
|
+
* Change `ActiveRecord::Relation#update` behavior so that it can
|
1948
|
+
be called without passing ids of the records to be updated.
|
1949
|
+
|
1950
|
+
This change allows updating multiple records returned by
|
1951
|
+
`ActiveRecord::Relation` with callbacks and validations.
|
1952
|
+
|
1953
|
+
# Before
|
1954
|
+
# ArgumentError: wrong number of arguments (1 for 2)
|
1955
|
+
Comment.where(group: 'expert').update(body: "Group of Rails Experts")
|
1956
|
+
|
1957
|
+
# After
|
1958
|
+
# Comments with group expert updated with body "Group of Rails Experts"
|
1959
|
+
Comment.where(group: 'expert').update(body: "Group of Rails Experts")
|
1960
|
+
|
1961
|
+
*Prathamesh Sonpatki*
|
1962
|
+
|
1963
|
+
* Fix `reaping_frequency` option when the value is a string.
|
1964
|
+
|
1965
|
+
This usually happens when it is configured using `DATABASE_URL`.
|
1966
|
+
|
1967
|
+
*korbin*
|
1968
|
+
|
1969
|
+
* Fix error message when trying to create an associated record and the foreign
|
1970
|
+
key is missing.
|
1971
|
+
|
1972
|
+
Before this fix the following exception was being raised:
|
1973
|
+
|
1974
|
+
NoMethodError: undefined method `val' for #<Arel::Nodes::BindParam:0x007fc64d19c218>
|
1975
|
+
|
1976
|
+
Now the message is:
|
1977
|
+
|
1978
|
+
ActiveRecord::UnknownAttributeError: unknown attribute 'foreign_key' for Model.
|
1979
|
+
|
1980
|
+
*Rafael Mendonça França*
|
1981
|
+
|
1982
|
+
* Fix change detection problem for PostgreSQL bytea type and
|
1983
|
+
`ArgumentError: string contains null byte` exception with pg-0.18.
|
1984
|
+
|
1985
|
+
Fixes #17680.
|
1986
|
+
|
1987
|
+
*Lars Kanis*
|
1988
|
+
|
1989
|
+
* When a table has a composite primary key, the `primary_key` method for
|
1990
|
+
SQLite3 and PostgreSQL adapters was only returning the first field of the key.
|
1991
|
+
Ensures that it will return nil instead, as Active Record doesn't support
|
1992
|
+
composite primary keys.
|
1993
|
+
|
1994
|
+
Fixes #18070.
|
1995
|
+
|
1996
|
+
*arthurnn*
|
1997
|
+
|
1998
|
+
* `validates_size_of` / `validates_length_of` do not count records
|
1999
|
+
which are `marked_for_destruction?`.
|
2000
|
+
|
2001
|
+
Fixes #7247.
|
2002
|
+
|
2003
|
+
*Yves Senn*
|
2004
|
+
|
2005
|
+
* Ensure `first!` and friends work on loaded associations.
|
2006
|
+
|
2007
|
+
Fixes #18237.
|
2008
|
+
|
2009
|
+
*Sean Griffin*
|
2010
|
+
|
2011
|
+
* `eager_load` preserves readonly flag for associations.
|
2012
|
+
|
2013
|
+
Fixes #15853.
|
2014
|
+
|
2015
|
+
*Takashi Kokubun*
|
2016
|
+
|
2017
|
+
* Provide `:touch` option to `save()` to accommodate saving without updating
|
2018
|
+
timestamps.
|
2019
|
+
|
2020
|
+
Fixes #18202.
|
2021
|
+
|
2022
|
+
*Dan Olson*
|
2023
|
+
|
2024
|
+
* Provide a more helpful error message when an unsupported class is passed to
|
2025
|
+
`serialize`.
|
2026
|
+
|
2027
|
+
Fixes #18224.
|
2028
|
+
|
2029
|
+
*Sean Griffin*
|
2030
|
+
|
2031
|
+
* Add bigint primary key support for MySQL.
|
2032
|
+
|
2033
|
+
Example:
|
2034
|
+
|
2035
|
+
create_table :foos, id: :bigint do |t|
|
2036
|
+
end
|
2037
|
+
|
2038
|
+
*Ryuta Kamizono*
|
2039
|
+
|
2040
|
+
* Support for any type of primary key.
|
2041
|
+
|
2042
|
+
Fixes #14194.
|
2043
|
+
|
2044
|
+
*Ryuta Kamizono*
|
2045
|
+
|
2046
|
+
* Dump the default `nil` for PostgreSQL UUID primary key.
|
2047
|
+
|
2048
|
+
*Ryuta Kamizono*
|
2049
|
+
|
2050
|
+
* Add a `:foreign_key` option to `references` and associated migration
|
2051
|
+
methods. The model and migration generators now use this option, rather than
|
2052
|
+
the `add_foreign_key` form.
|
2053
|
+
|
2054
|
+
*Sean Griffin*
|
2055
|
+
|
2056
|
+
* Don't raise when writing an attribute with an out-of-range datetime passed
|
2057
|
+
by the user.
|
2058
|
+
|
2059
|
+
*Grey Baker*
|
2060
|
+
|
2061
|
+
* Replace deprecated `ActiveRecord::Tasks::DatabaseTasks#load_schema` with
|
2062
|
+
`ActiveRecord::Tasks::DatabaseTasks#load_schema_for`.
|
2063
|
+
|
2064
|
+
*Yves Senn*
|
2065
|
+
|
2066
|
+
* Fix bug with `ActiveRecord::Type::Numeric` that caused negative values to
|
2067
|
+
be marked as having changed when set to the same negative value.
|
2068
|
+
|
2069
|
+
Fixes #18161.
|
2070
|
+
|
2071
|
+
*Daniel Fox*
|
2072
|
+
|
2073
|
+
* Introduce `force: :cascade` option for `create_table`. Using this option
|
2074
|
+
will recreate tables even if they have dependent objects (like foreign keys).
|
2075
|
+
`db/schema.rb` now uses `force: :cascade`. This makes it possible to
|
2076
|
+
reload the schema when foreign keys are in place.
|
2077
|
+
|
2078
|
+
*Matthew Draper*, *Yves Senn*
|
2079
|
+
|
2080
|
+
* `db:schema:load` and `db:structure:load` no longer purge the database
|
2081
|
+
before loading the schema. This is left for the user to do.
|
2082
|
+
`db:test:prepare` will still purge the database.
|
2083
|
+
|
2084
|
+
Fixes #17945.
|
2085
|
+
|
2086
|
+
*Yves Senn*
|
2087
|
+
|
2088
|
+
* Fix undesirable RangeError by `Type::Integer`. Add `Type::UnsignedInteger`.
|
2089
|
+
|
2090
|
+
*Ryuta Kamizono*
|
2091
|
+
|
2092
|
+
* Add `foreign_type` option to `has_one` and `has_many` association macros.
|
2093
|
+
|
2094
|
+
This option enables to define the column name of associated object's type for polymorphic associations.
|
2095
|
+
|
2096
|
+
*Ulisses Almeida*, *Kassio Borges*
|
2097
|
+
|
2098
|
+
* Remove deprecated behavior allowing nested arrays to be passed as query
|
2099
|
+
values.
|
2100
|
+
|
2101
|
+
*Melanie Gilman*
|
2102
|
+
|
2103
|
+
* Deprecate passing a class as a value in a query. Users should pass strings
|
2104
|
+
instead.
|
2105
|
+
|
2106
|
+
*Melanie Gilman*
|
2107
|
+
|
2108
|
+
* `add_timestamps` and `remove_timestamps` now properly reversible with
|
2109
|
+
options.
|
2110
|
+
|
2111
|
+
*Noam Gagliardi-Rabinovich*
|
2112
|
+
|
2113
|
+
* `ActiveRecord::ConnectionAdapters::ColumnDumper#column_spec` and
|
2114
|
+
`ActiveRecord::ConnectionAdapters::ColumnDumper#prepare_column_options` no
|
2115
|
+
longer have a `types` argument. They should access
|
2116
|
+
`connection#native_database_types` directly.
|
1369
2117
|
|
1370
2118
|
*Yves Senn*
|
1371
2119
|
|
1372
|
-
Please check [4-
|
2120
|
+
Please check [4-2-stable](https://github.com/rails/rails/blob/4-2-stable/activerecord/CHANGELOG.md) for previous changes.
|