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