activerecord 4.1.8 → 4.2.11.3
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 +1165 -1591
- data/README.rdoc +15 -10
- data/lib/active_record/aggregations.rb +15 -8
- data/lib/active_record/association_relation.rb +13 -0
- data/lib/active_record/associations/alias_tracker.rb +3 -12
- data/lib/active_record/associations/association.rb +16 -4
- data/lib/active_record/associations/association_scope.rb +84 -43
- data/lib/active_record/associations/belongs_to_association.rb +28 -10
- data/lib/active_record/associations/builder/association.rb +16 -5
- data/lib/active_record/associations/builder/belongs_to.rb +7 -29
- data/lib/active_record/associations/builder/collection_association.rb +5 -1
- data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +9 -14
- data/lib/active_record/associations/builder/has_many.rb +1 -1
- data/lib/active_record/associations/builder/has_one.rb +2 -2
- data/lib/active_record/associations/builder/singular_association.rb +8 -1
- data/lib/active_record/associations/collection_association.rb +87 -30
- data/lib/active_record/associations/collection_proxy.rb +33 -35
- data/lib/active_record/associations/foreign_association.rb +11 -0
- data/lib/active_record/associations/has_many_association.rb +83 -22
- data/lib/active_record/associations/has_many_through_association.rb +49 -26
- data/lib/active_record/associations/has_one_association.rb +1 -1
- data/lib/active_record/associations/join_dependency/join_association.rb +25 -15
- data/lib/active_record/associations/join_dependency/join_part.rb +0 -1
- data/lib/active_record/associations/join_dependency.rb +26 -12
- data/lib/active_record/associations/preloader/association.rb +14 -10
- data/lib/active_record/associations/preloader/through_association.rb +4 -3
- data/lib/active_record/associations/preloader.rb +37 -26
- data/lib/active_record/associations/singular_association.rb +17 -2
- data/lib/active_record/associations/through_association.rb +16 -12
- data/lib/active_record/associations.rb +158 -49
- data/lib/active_record/attribute.rb +163 -0
- data/lib/active_record/attribute_assignment.rb +20 -12
- data/lib/active_record/attribute_decorators.rb +66 -0
- data/lib/active_record/attribute_methods/before_type_cast.rb +7 -2
- data/lib/active_record/attribute_methods/dirty.rb +107 -43
- data/lib/active_record/attribute_methods/primary_key.rb +7 -8
- data/lib/active_record/attribute_methods/query.rb +1 -1
- data/lib/active_record/attribute_methods/read.rb +22 -59
- data/lib/active_record/attribute_methods/serialization.rb +16 -150
- data/lib/active_record/attribute_methods/time_zone_conversion.rb +38 -28
- data/lib/active_record/attribute_methods/write.rb +9 -24
- data/lib/active_record/attribute_methods.rb +57 -95
- data/lib/active_record/attribute_set/builder.rb +106 -0
- data/lib/active_record/attribute_set.rb +81 -0
- data/lib/active_record/attributes.rb +147 -0
- data/lib/active_record/autosave_association.rb +30 -12
- data/lib/active_record/base.rb +13 -24
- data/lib/active_record/callbacks.rb +6 -6
- data/lib/active_record/connection_adapters/abstract/connection_pool.rb +85 -53
- data/lib/active_record/connection_adapters/abstract/database_statements.rb +52 -50
- data/lib/active_record/connection_adapters/abstract/query_cache.rb +1 -1
- data/lib/active_record/connection_adapters/abstract/quoting.rb +60 -60
- data/lib/active_record/connection_adapters/abstract/savepoints.rb +1 -1
- data/lib/active_record/connection_adapters/abstract/schema_creation.rb +39 -4
- data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +139 -57
- data/lib/active_record/connection_adapters/abstract/schema_dumper.rb +14 -34
- data/lib/active_record/connection_adapters/abstract/schema_statements.rb +271 -74
- data/lib/active_record/connection_adapters/abstract/transaction.rb +125 -118
- data/lib/active_record/connection_adapters/abstract_adapter.rb +177 -60
- data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +295 -141
- data/lib/active_record/connection_adapters/column.rb +29 -240
- data/lib/active_record/connection_adapters/connection_specification.rb +15 -24
- data/lib/active_record/connection_adapters/mysql2_adapter.rb +17 -33
- data/lib/active_record/connection_adapters/mysql_adapter.rb +68 -145
- data/lib/active_record/connection_adapters/postgresql/array_parser.rb +15 -27
- data/lib/active_record/connection_adapters/postgresql/column.rb +20 -0
- data/lib/active_record/connection_adapters/postgresql/database_statements.rb +40 -25
- data/lib/active_record/connection_adapters/postgresql/oid/array.rb +100 -0
- data/lib/active_record/connection_adapters/postgresql/oid/bit.rb +52 -0
- data/lib/active_record/connection_adapters/postgresql/oid/bit_varying.rb +13 -0
- data/lib/active_record/connection_adapters/postgresql/oid/bytea.rb +15 -0
- data/lib/active_record/connection_adapters/postgresql/oid/cidr.rb +46 -0
- data/lib/active_record/connection_adapters/postgresql/oid/date.rb +11 -0
- data/lib/active_record/connection_adapters/postgresql/oid/date_time.rb +36 -0
- data/lib/active_record/connection_adapters/postgresql/oid/decimal.rb +13 -0
- data/lib/active_record/connection_adapters/postgresql/oid/enum.rb +19 -0
- data/lib/active_record/connection_adapters/postgresql/oid/float.rb +21 -0
- data/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +59 -0
- data/lib/active_record/connection_adapters/postgresql/oid/inet.rb +13 -0
- data/lib/active_record/connection_adapters/postgresql/oid/infinity.rb +13 -0
- data/lib/active_record/connection_adapters/postgresql/oid/integer.rb +11 -0
- data/lib/active_record/connection_adapters/postgresql/oid/json.rb +35 -0
- data/lib/active_record/connection_adapters/postgresql/oid/jsonb.rb +23 -0
- data/lib/active_record/connection_adapters/postgresql/oid/money.rb +43 -0
- data/lib/active_record/connection_adapters/postgresql/oid/point.rb +43 -0
- data/lib/active_record/connection_adapters/postgresql/oid/range.rb +79 -0
- data/lib/active_record/connection_adapters/postgresql/oid/specialized_string.rb +19 -0
- data/lib/active_record/connection_adapters/postgresql/oid/time.rb +11 -0
- data/lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb +109 -0
- data/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +21 -0
- data/lib/active_record/connection_adapters/postgresql/oid/vector.rb +26 -0
- data/lib/active_record/connection_adapters/postgresql/oid/xml.rb +28 -0
- data/lib/active_record/connection_adapters/postgresql/oid.rb +29 -385
- data/lib/active_record/connection_adapters/postgresql/quoting.rb +46 -136
- data/lib/active_record/connection_adapters/postgresql/referential_integrity.rb +4 -4
- data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +152 -0
- data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +134 -43
- data/lib/active_record/connection_adapters/postgresql/utils.rb +77 -0
- data/lib/active_record/connection_adapters/postgresql_adapter.rb +224 -477
- data/lib/active_record/connection_adapters/schema_cache.rb +14 -28
- data/lib/active_record/connection_adapters/sqlite3_adapter.rb +61 -75
- data/lib/active_record/connection_handling.rb +1 -1
- data/lib/active_record/core.rb +163 -40
- data/lib/active_record/counter_cache.rb +60 -6
- data/lib/active_record/enum.rb +10 -12
- data/lib/active_record/errors.rb +53 -30
- data/lib/active_record/explain.rb +1 -1
- data/lib/active_record/explain_subscriber.rb +1 -1
- data/lib/active_record/fixtures.rb +62 -74
- data/lib/active_record/gem_version.rb +4 -4
- data/lib/active_record/inheritance.rb +35 -10
- data/lib/active_record/integration.rb +4 -4
- data/lib/active_record/legacy_yaml_adapter.rb +30 -0
- data/lib/active_record/locking/optimistic.rb +46 -26
- data/lib/active_record/migration/command_recorder.rb +19 -2
- data/lib/active_record/migration/join_table.rb +1 -1
- data/lib/active_record/migration.rb +79 -47
- data/lib/active_record/model_schema.rb +52 -58
- data/lib/active_record/nested_attributes.rb +18 -8
- data/lib/active_record/no_touching.rb +1 -1
- data/lib/active_record/persistence.rb +48 -27
- data/lib/active_record/query_cache.rb +3 -3
- data/lib/active_record/querying.rb +10 -7
- data/lib/active_record/railtie.rb +19 -14
- data/lib/active_record/railties/databases.rake +55 -56
- data/lib/active_record/readonly_attributes.rb +0 -1
- data/lib/active_record/reflection.rb +281 -117
- data/lib/active_record/relation/batches.rb +0 -1
- data/lib/active_record/relation/calculations.rb +41 -37
- data/lib/active_record/relation/delegation.rb +1 -1
- data/lib/active_record/relation/finder_methods.rb +71 -48
- data/lib/active_record/relation/merger.rb +39 -29
- data/lib/active_record/relation/predicate_builder/array_handler.rb +32 -13
- data/lib/active_record/relation/predicate_builder/relation_handler.rb +1 -1
- data/lib/active_record/relation/predicate_builder.rb +42 -12
- data/lib/active_record/relation/query_methods.rb +130 -73
- data/lib/active_record/relation/spawn_methods.rb +10 -3
- data/lib/active_record/relation.rb +57 -25
- data/lib/active_record/result.rb +18 -7
- data/lib/active_record/sanitization.rb +12 -2
- data/lib/active_record/schema.rb +0 -1
- data/lib/active_record/schema_dumper.rb +59 -28
- data/lib/active_record/schema_migration.rb +5 -4
- data/lib/active_record/scoping/default.rb +6 -4
- data/lib/active_record/scoping/named.rb +4 -0
- data/lib/active_record/serializers/xml_serializer.rb +3 -7
- data/lib/active_record/statement_cache.rb +95 -10
- data/lib/active_record/store.rb +5 -5
- data/lib/active_record/tasks/database_tasks.rb +61 -8
- data/lib/active_record/tasks/mysql_database_tasks.rb +32 -17
- data/lib/active_record/tasks/postgresql_database_tasks.rb +20 -9
- data/lib/active_record/timestamp.rb +9 -7
- data/lib/active_record/transactions.rb +54 -28
- data/lib/active_record/type/big_integer.rb +13 -0
- data/lib/active_record/type/binary.rb +50 -0
- data/lib/active_record/type/boolean.rb +31 -0
- data/lib/active_record/type/date.rb +50 -0
- data/lib/active_record/type/date_time.rb +54 -0
- data/lib/active_record/type/decimal.rb +64 -0
- data/lib/active_record/type/decimal_without_scale.rb +11 -0
- data/lib/active_record/type/decorator.rb +14 -0
- data/lib/active_record/type/float.rb +19 -0
- data/lib/active_record/type/hash_lookup_type_map.rb +23 -0
- data/lib/active_record/type/integer.rb +59 -0
- data/lib/active_record/type/mutable.rb +16 -0
- data/lib/active_record/type/numeric.rb +36 -0
- data/lib/active_record/type/serialized.rb +62 -0
- data/lib/active_record/type/string.rb +40 -0
- data/lib/active_record/type/text.rb +11 -0
- data/lib/active_record/type/time.rb +26 -0
- data/lib/active_record/type/time_value.rb +38 -0
- data/lib/active_record/type/type_map.rb +64 -0
- data/lib/active_record/type/unsigned_integer.rb +15 -0
- data/lib/active_record/type/value.rb +110 -0
- data/lib/active_record/type.rb +23 -0
- data/lib/active_record/validations/associated.rb +5 -3
- data/lib/active_record/validations/presence.rb +5 -3
- data/lib/active_record/validations/uniqueness.rb +24 -20
- data/lib/active_record/validations.rb +25 -19
- data/lib/active_record.rb +5 -0
- data/lib/rails/generators/active_record/migration/migration_generator.rb +8 -4
- data/lib/rails/generators/active_record/migration/templates/create_table_migration.rb +1 -1
- data/lib/rails/generators/active_record/model/templates/model.rb +1 -1
- metadata +66 -11
- data/lib/active_record/connection_adapters/postgresql/cast.rb +0 -168
data/CHANGELOG.md
CHANGED
@@ -1,2469 +1,2043 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
Fixes #15931.
|
4
|
-
|
5
|
-
*Jeff Browning*
|
6
|
-
|
7
|
-
* Allow included modules to override association methods.
|
1
|
+
## Rails 4.2.11.3 (May 15, 2020) ##
|
8
2
|
|
9
|
-
|
10
|
-
|
11
|
-
*Yves Senn*
|
12
|
-
|
13
|
-
* Schema loading rake tasks (like `db:schema:load` and `db:setup`) maintain
|
14
|
-
the database connection to the current environment.
|
3
|
+
* No changes.
|
15
4
|
|
16
|
-
Fixes #16757.
|
17
5
|
|
18
|
-
|
6
|
+
## Rails 4.2.11.2 (May 15, 2020) ##
|
19
7
|
|
20
|
-
*
|
8
|
+
* No changes.
|
21
9
|
|
22
|
-
*Yves Senn*
|
23
10
|
|
24
|
-
|
25
|
-
schema format.
|
11
|
+
## Rails 4.2.11.1 (March 11, 2019) ##
|
26
12
|
|
27
|
-
|
13
|
+
* No changes.
|
28
14
|
|
29
|
-
*Wojciech Wnętrzak*
|
30
15
|
|
31
|
-
|
32
|
-
passed as a lambda with an arity of one.
|
16
|
+
## Rails 4.2.11 (November 27, 2018) ##
|
33
17
|
|
34
|
-
|
18
|
+
* No changes.
|
35
19
|
|
36
|
-
*Agis Anastasopoulos*
|
37
20
|
|
21
|
+
## Rails 4.2.10 (September 27, 2017) ##
|
38
22
|
|
39
|
-
|
23
|
+
* `Relation#joins` is no longer affected by the target model's
|
24
|
+
`current_scope`, with the exception of `unscoped`.
|
40
25
|
|
41
|
-
|
42
|
-
PostgreSQL.
|
26
|
+
Fixes #29338.
|
43
27
|
|
44
|
-
*
|
28
|
+
*Sean Griffin*
|
45
29
|
|
46
|
-
|
30
|
+
## Rails 4.2.9 (June 26, 2017) ##
|
47
31
|
|
48
|
-
*
|
49
|
-
`enum`) with the same name as a global method are incorrectly overridden
|
50
|
-
when subclassing.
|
32
|
+
* Fix regression caused by `collection_singular_ids=` ignoring different primary key on relationship.
|
51
33
|
|
52
|
-
|
34
|
+
*Nick Pezza*
|
53
35
|
|
54
|
-
*
|
36
|
+
* Fix `rake db:schema:load` with subdirectories.
|
55
37
|
|
56
|
-
|
57
|
-
Setting update_record to the base class, ensures the record can be found.
|
38
|
+
*Ryuta Kamizono*
|
58
39
|
|
59
|
-
|
40
|
+
* Fix `rake db:migrate:status` with subdirectories.
|
60
41
|
|
61
|
-
*
|
42
|
+
*Ryuta Kamizono*
|
62
43
|
|
63
|
-
* Fix regression
|
44
|
+
* Fix regression of #1969 with SELECT aliases in HAVING clause.
|
64
45
|
|
65
|
-
|
46
|
+
*Eugene Kenny*
|
66
47
|
|
67
|
-
|
48
|
+
* Fix `wait_timeout` to configurable for mysql2 adapter.
|
68
49
|
|
69
|
-
|
50
|
+
Fixes #26556.
|
70
51
|
|
71
|
-
|
72
|
-
Active Record will return the current value of the primary key. This
|
73
|
-
make impossible to correctly do an update operation if you change the
|
74
|
-
id.
|
52
|
+
*Ryuta Kamizono*
|
75
53
|
|
76
|
-
|
54
|
+
* Make `table_name=` reset current statement cache,
|
55
|
+
so queries are not run against the previous table name.
|
77
56
|
|
78
|
-
*
|
57
|
+
*namusyaka*
|
79
58
|
|
80
|
-
* Fix the schema dump generated for tables without constraints and with
|
81
|
-
primary key with default value of custom PostgreSQL function result.
|
82
59
|
|
83
|
-
|
60
|
+
## Rails 4.2.8 (February 21, 2017) ##
|
84
61
|
|
85
|
-
|
62
|
+
* Using a mysql2 connection after it fails to reconnect will now have an error message
|
63
|
+
saying the connection is closed rather than an undefined method error message.
|
86
64
|
|
87
|
-
*
|
88
|
-
|
89
|
-
With 4.1.x, `serialize` started returning a string when `JSON` was passed as
|
90
|
-
the second attribute. It will now return a hash as per previous versions.
|
91
|
-
|
92
|
-
Example:
|
93
|
-
|
94
|
-
class Post < ActiveRecord::Base
|
95
|
-
serialize :comment, JSON
|
96
|
-
end
|
97
|
-
|
98
|
-
class Comment
|
99
|
-
include ActiveModel::Model
|
100
|
-
attr_accessor :category, :text
|
101
|
-
end
|
102
|
-
|
103
|
-
post = Post.create!
|
104
|
-
post.comment = Comment.new(category: "Animals", text: "This is a comment about squirrels.")
|
105
|
-
post.save!
|
106
|
-
|
107
|
-
# 4.0
|
108
|
-
post.comment # => {"category"=>"Animals", "text"=>"This is a comment about squirrels."}
|
109
|
-
|
110
|
-
# 4.1 before
|
111
|
-
post.comment # => "#<Comment:0x007f80ab48ff98>"
|
112
|
-
|
113
|
-
# 4.1 after
|
114
|
-
post.comment # => {"category"=>"Animals", "text"=>"This is a comment about squirrels."}
|
65
|
+
*Dylan Thacker-Smith*
|
115
66
|
|
116
|
-
|
117
|
-
new `ActiveRecord::Coders::JSON` coder which delegates its `dump/load` to
|
118
|
-
`ActiveSupport::JSON.encode/decode`. This ensures special objects are dumped
|
119
|
-
correctly using the `#as_json` hook.
|
67
|
+
* Bust Model.attribute_names cache when resetting column information
|
120
68
|
|
121
|
-
|
122
|
-
([example](https://gist.github.com/jenncoop/8c4142bbe59da77daa63)).
|
69
|
+
*James Coleman*
|
123
70
|
|
124
|
-
|
71
|
+
* Fix query caching when type information is reset
|
125
72
|
|
126
|
-
|
73
|
+
Backports ancillary fix in 5.0.
|
127
74
|
|
128
|
-
*
|
129
|
-
(Call to `count` generates invalid SQL.)
|
75
|
+
*James Coleman*
|
130
76
|
|
131
|
-
|
77
|
+
* Allow `joins` to be unscoped.
|
132
78
|
|
133
|
-
|
79
|
+
Fixes #13775.
|
134
80
|
|
135
|
-
|
81
|
+
*Takashi Kokubun*
|
136
82
|
|
137
|
-
|
83
|
+
* Hashes can once again be passed to setters of `composed_of`, if all of the
|
84
|
+
mapping methods are methods implemented on `Hash`.
|
138
85
|
|
139
|
-
|
140
|
-
are part of the URI structure, not the actual host.
|
86
|
+
Fixes #25978.
|
141
87
|
|
142
|
-
|
88
|
+
*Sean Griffin*
|
143
89
|
|
144
|
-
*Andy Bakun*, *Aaron Stone*
|
145
90
|
|
146
|
-
|
91
|
+
## Rails 4.2.7 (July 12, 2016) ##
|
147
92
|
|
148
|
-
|
93
|
+
* Inspecting an object with an associated array of over 10 elements no longer
|
94
|
+
truncates the array, preventing `inspect` from looping infinitely in some
|
95
|
+
cases.
|
149
96
|
|
150
|
-
*
|
97
|
+
*Kevin McPhillips*
|
151
98
|
|
152
|
-
* Ensure
|
153
|
-
|
99
|
+
* Ensure hashes can be assigned to attributes created using `composed_of`.
|
100
|
+
Fixes #25210.
|
154
101
|
|
155
102
|
*Sean Griffin*
|
156
103
|
|
157
|
-
*
|
158
|
-
|
104
|
+
* Queries such as `Computer.joins(:monitor).group(:status).count` will now be
|
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.
|
159
108
|
|
160
|
-
|
109
|
+
*Rafael Sales*
|
161
110
|
|
162
|
-
|
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).
|
163
114
|
|
164
|
-
|
165
|
-
`Enumerable#find` does.
|
115
|
+
Fixes #20434
|
166
116
|
|
167
|
-
|
117
|
+
*Konstantinos Rousis*
|
168
118
|
|
169
|
-
|
119
|
+
* Correctly pass MySQL options when using structure_dump or structure_load
|
170
120
|
|
171
|
-
|
172
|
-
`primary_key_prefix_type` configuration.
|
121
|
+
Specifically, it fixes an issue when using SSL authentication.
|
173
122
|
|
174
|
-
|
123
|
+
*Alex Coomans*
|
175
124
|
|
176
|
-
*JoseLuis Torres*, *Yves Senn*
|
177
125
|
|
178
|
-
|
126
|
+
## Rails 4.2.6 (March 07, 2016) ##
|
179
127
|
|
180
|
-
|
128
|
+
* Fix a bug where using `t.foreign_key` twice with the same `to_table` within
|
129
|
+
the same table definition would only create one foreign key.
|
181
130
|
|
182
|
-
*
|
131
|
+
*George Millo*
|
183
132
|
|
184
|
-
*
|
185
|
-
|
133
|
+
* Fix regression in dirty attribute tracking after #dup. Changes to the
|
134
|
+
clone no longer show as changed attributes in the original object.
|
186
135
|
|
187
|
-
*
|
136
|
+
*Dominic Cleal*
|
188
137
|
|
189
|
-
*
|
190
|
-
Fixes duplication in combination with `store_accessor`.
|
138
|
+
* Fix regression when loading fixture files with symbol keys.
|
191
139
|
|
192
|
-
|
140
|
+
Closes #22584.
|
193
141
|
|
194
142
|
*Yves Senn*
|
195
143
|
|
196
|
-
* `rake
|
197
|
-
|
198
|
-
*Arun Agrawal*
|
199
|
-
|
200
|
-
|
201
|
-
## Rails 4.1.5 (August 18, 2014) ##
|
144
|
+
* Fix `rake db:structure:dump` on Postgres when multiple schemas are used.
|
202
145
|
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
## Rails 4.1.4 (July 2, 2014) ##
|
207
|
-
|
208
|
-
* Fix regression added from the latest security fix.
|
146
|
+
Fixes #22346.
|
209
147
|
|
210
|
-
*
|
148
|
+
*Nick Muerdter*, *ckoenig*
|
211
149
|
|
150
|
+
* Introduce `connection.data_sources` and `connection.data_source_exists?`.
|
151
|
+
These methods determine what relations can be used to back Active Record
|
152
|
+
models (usually tables and views).
|
212
153
|
|
213
|
-
|
154
|
+
*Yves Senn*, *Matthew Draper*
|
214
155
|
|
215
|
-
* Fix SQL Injection Vulnerability in 'range' quoting.
|
216
|
-
|
217
|
-
Fixes CVE-2014-3483
|
218
|
-
|
219
|
-
*Rafael Mendonça França*
|
220
156
|
|
157
|
+
## Rails 4.2.5.2 (February 26, 2016) ##
|
221
158
|
|
222
|
-
|
223
|
-
|
224
|
-
* Fix regression on eager loading association based on SQL query rather than
|
225
|
-
existing column.
|
226
|
-
|
227
|
-
Fixes #15480.
|
228
|
-
|
229
|
-
*Lauro Caetano*, *Carlos Antonio da Silva*
|
230
|
-
|
231
|
-
* Fix redefine a has_and_belongs_to_many inside inherited class
|
232
|
-
Fixing regression case, where redefining the same has_an_belongs_to_many
|
233
|
-
definition into a subclass would raise.
|
234
|
-
|
235
|
-
Fixes #14983.
|
236
|
-
|
237
|
-
*arthurnn*
|
238
|
-
|
239
|
-
* Fix has_and_belongs_to_many public reflection.
|
240
|
-
When defining a has_and_belongs_to_many, internally we convert that to two has_many.
|
241
|
-
But as `reflections` is a public API, people expect to see the right macro.
|
242
|
-
|
243
|
-
Fixes #14682.
|
244
|
-
|
245
|
-
*arthurnn*
|
159
|
+
* No changes.
|
246
160
|
|
247
|
-
* Fixed serialization for records with an attribute named `format`.
|
248
161
|
|
249
|
-
|
162
|
+
## Rails 4.2.5.1 (January 25, 2015) ##
|
250
163
|
|
251
|
-
|
164
|
+
* No changes.
|
252
165
|
|
253
|
-
* Fixed serialized fields returning serialized data after being updated with
|
254
|
-
`update_column`.
|
255
166
|
|
256
|
-
|
167
|
+
## Rails 4.2.5 (November 12, 2015) ##
|
257
168
|
|
258
|
-
*
|
259
|
-
on a NullRelation should return a Hash.
|
169
|
+
* No longer pass deprecated option `-i` to `pg_dump`.
|
260
170
|
|
261
|
-
*
|
171
|
+
*Paul Sadauskas*
|
262
172
|
|
263
|
-
*
|
173
|
+
* Set `scope.reordering_value` to `true` if :reordering values are specified.
|
264
174
|
|
265
|
-
Fixes #
|
175
|
+
Fixes #21886.
|
266
176
|
|
267
|
-
*
|
177
|
+
*Hiroaki Izu*
|
268
178
|
|
269
|
-
*
|
270
|
-
|
179
|
+
* Avoid disabling errors on the PostgreSQL connection when enabling the
|
180
|
+
standard_conforming_strings setting. Errors were previously disabled because
|
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.
|
271
187
|
|
272
|
-
Fixes #
|
188
|
+
Fixes #22101.
|
273
189
|
|
274
|
-
*
|
275
|
-
|
276
|
-
* Fix bug that added `table_name_prefix` and `table_name_suffix` to
|
277
|
-
extension names in PostgreSQL when migrating.
|
278
|
-
|
279
|
-
*Joao Carlos*
|
190
|
+
*Harry Marr*
|
280
191
|
|
281
|
-
*
|
282
|
-
|
283
|
-
|
284
|
-
Fixes #14135.
|
192
|
+
* Includes HABTM returns correct size now. It's caused by the join dependency
|
193
|
+
only instantiates one HABTM object because the join table hasn't a primary key.
|
285
194
|
|
286
|
-
|
195
|
+
Fixes #16032.
|
287
196
|
|
288
|
-
|
289
|
-
association.
|
290
|
-
|
291
|
-
Fixes #14709.
|
292
|
-
|
293
|
-
*Kassio Borges*
|
294
|
-
|
295
|
-
* `ActiveRecord::Relation::Merger#filter_binds` now compares equivalent symbols and
|
296
|
-
strings in column names as equal.
|
197
|
+
Examples:
|
297
198
|
|
298
|
-
|
299
|
-
placeholders for them in the generated SQL statement, which can make PostgreSQL
|
300
|
-
throw a `StatementInvalid` exception.
|
199
|
+
before:
|
301
200
|
|
302
|
-
|
201
|
+
Project.first.salaried_developers.size # => 3
|
202
|
+
Project.includes(:salaried_developers).first.salaried_developers.size # => 1
|
303
203
|
|
304
|
-
|
305
|
-
attributes defined in parent classes.
|
204
|
+
after:
|
306
205
|
|
307
|
-
|
206
|
+
Project.first.salaried_developers.size # => 3
|
207
|
+
Project.includes(:salaried_developers).first.salaried_developers.size # => 3
|
308
208
|
|
309
|
-
*
|
209
|
+
*Bigxiang*
|
310
210
|
|
311
|
-
*
|
211
|
+
* Descriptive error message when fixtures contain a missing column.
|
312
212
|
|
313
|
-
|
213
|
+
Closes #21201.
|
314
214
|
|
315
215
|
*Yves Senn*
|
316
216
|
|
317
|
-
*
|
318
|
-
|
319
|
-
|
320
|
-
Example:
|
321
|
-
|
322
|
-
# Before
|
323
|
-
Point.create(value: 1.0/0)
|
324
|
-
Point.last.value # => 0.0
|
325
|
-
|
326
|
-
# After
|
327
|
-
Point.create(value: 1.0/0)
|
328
|
-
Point.last.value # => Infinity
|
329
|
-
|
330
|
-
*Innokenty Mikhailov*
|
331
|
-
|
332
|
-
* Allow the PostgreSQL adapter to handle bigserial primary key types again.
|
333
|
-
|
334
|
-
Fixes #10410.
|
335
|
-
|
336
|
-
*Patrick Robertson*
|
337
|
-
|
338
|
-
* Fixed has_and_belongs_to_many's CollectionAssociation size calculation.
|
339
|
-
|
340
|
-
has_and_belongs_to_many should fall back to using the normal CollectionAssociation's
|
341
|
-
size calculation if the collection is not cached or loaded.
|
342
|
-
|
343
|
-
Fixes #14913 and #14914.
|
344
|
-
|
345
|
-
*Fred Wu*
|
346
|
-
|
347
|
-
* Revert the behaviour of `ActiveRecord::Relation#join` changed through 4.0 => 4.1 to 4.0.
|
348
|
-
|
349
|
-
In 4.1.0 `Relation#join` is delegated to `Arel#SelectManager`.
|
350
|
-
In 4.0 series it is delegated to `Array#join`.
|
351
|
-
|
352
|
-
*Bogdan Gusiev*
|
353
|
-
|
354
|
-
* Log nil binary column values correctly.
|
355
|
-
|
356
|
-
When an object with a binary column is updated with a nil value
|
357
|
-
in that column, the SQL logger would throw an exception when trying
|
358
|
-
to log that nil value. This only occurs when updating a record
|
359
|
-
that already has a non-nil value in that column since an initial nil
|
360
|
-
value isn't included in the SQL anyway (at least, when dirty checking
|
361
|
-
is enabled.) The column's new value will now be logged as `<NULL binary data>`
|
362
|
-
to parallel the existing `<N bytes of binary data>` for non-nil values.
|
363
|
-
|
364
|
-
*James Coleman*
|
365
|
-
|
366
|
-
* Stringify all variables keys of MySQL connection configuration.
|
367
|
-
|
368
|
-
When `sql_mode` variable for MySQL adapters set in configuration as `String`
|
369
|
-
was ignored and overwritten by strict mode option.
|
370
|
-
|
371
|
-
Fixes #14895.
|
372
|
-
|
373
|
-
*Paul Nikitochkin*
|
374
|
-
|
375
|
-
* Ensure SQLite3 statements are closed on errors.
|
376
|
-
|
377
|
-
Fixes #13631.
|
378
|
-
|
379
|
-
*Timur Alperovich*
|
380
|
-
|
381
|
-
* Fix excluding lower bounds of PostgreSQL date and int ranges.
|
382
|
-
|
383
|
-
*River MacLeod*, *Yves Senn*
|
384
|
-
|
385
|
-
* When using a custom `join_table` name on a `habtm`, rails was not saving it
|
386
|
-
on Reflections. This causes a problem when rails loads fixtures, because it
|
387
|
-
uses the reflections to set database with fixtures.
|
388
|
-
|
389
|
-
Fixes #14845.
|
390
|
-
|
391
|
-
*Kassio Borges*
|
392
|
-
|
393
|
-
* `ActiveRecord::Base.no_touching` no longer triggers callbacks or start empty transactions.
|
394
|
-
|
395
|
-
Fixes #14841.
|
396
|
-
|
397
|
-
*Lucas Mazza*
|
398
|
-
|
399
|
-
* Fix name collision with `Array#select!` with `Relation#select!`.
|
400
|
-
|
401
|
-
Fixes #14752.
|
402
|
-
|
403
|
-
*Earl St Sauver*
|
404
|
-
|
405
|
-
* Fixed unexpected behavior for `has_many :through` associations going through a scoped `has_many`.
|
406
|
-
|
407
|
-
If a `has_many` association is adjusted using a scope, and another `has_many :through`
|
408
|
-
uses this association, then the scope adjustment is unexpectedly neglected.
|
409
|
-
|
410
|
-
Fixes #14537.
|
411
|
-
|
412
|
-
*Jan Habermann*
|
413
|
-
|
414
|
-
* When a destroyed record is duped, the dup is not `destroyed?`.
|
415
|
-
|
416
|
-
*Kuldeep Aggarwal*
|
417
|
-
|
418
|
-
* Fixed has_many association to make it support irregular inflections.
|
419
|
-
|
420
|
-
Fixes #8928.
|
421
|
-
|
422
|
-
*arthurnn*, *Javier Goizueta*
|
423
|
-
|
424
|
-
* Calling `delete_all` on an unloaded `CollectionProxy` no longer
|
425
|
-
generates a SQL statement containing each id of the collection:
|
426
|
-
|
427
|
-
Before:
|
428
|
-
|
429
|
-
DELETE FROM `model` WHERE `model`.`parent_id` = 1
|
430
|
-
AND `model`.`id` IN (1, 2, 3...)
|
431
|
-
|
432
|
-
After:
|
433
|
-
|
434
|
-
DELETE FROM `model` WHERE `model`.`parent_id` = 1
|
435
|
-
|
436
|
-
*Eileen M. Uchitelle*, *Aaron Patterson*
|
437
|
-
|
438
|
-
* Fixed a problem where count used with a grouping was not returning a Hash.
|
439
|
-
|
440
|
-
Fixes #14721.
|
441
|
-
|
442
|
-
*Eric Chahin*
|
443
|
-
|
444
|
-
* Do not quote uuid default value on `change_column`.
|
445
|
-
|
446
|
-
Fixes #14604.
|
447
|
-
|
448
|
-
*Eric Chahin*
|
449
|
-
|
450
|
-
* The comparison between `Relation` and `CollectionProxy` should be consistent.
|
451
|
-
|
452
|
-
Example:
|
453
|
-
|
454
|
-
author.posts == Post.where(author_id: author.id)
|
455
|
-
# => true
|
456
|
-
Post.where(author_id: author.id) == author.posts
|
457
|
-
# => true
|
458
|
-
|
459
|
-
Fixes #13506.
|
460
|
-
|
461
|
-
*Lauro Caetano*
|
217
|
+
* `bin/rake db:migrate` uses
|
218
|
+
`ActiveRecord::Tasks::DatabaseTasks.migrations_paths` instead of
|
219
|
+
`Migrator.migrations_paths`.
|
462
220
|
|
463
|
-
*
|
221
|
+
*Tobias Bielohlawek*
|
464
222
|
|
465
|
-
|
223
|
+
* Fix `rewhere` in a `has_many` association.
|
466
224
|
|
467
|
-
|
225
|
+
Fixes #21955.
|
468
226
|
|
469
|
-
*
|
470
|
-
which created invalid SQL.
|
227
|
+
*Josh Branchaud*, *Kal*
|
471
228
|
|
472
|
-
|
229
|
+
* Added run_cmd class method to ActiveRecord::Tasks::DatabaseTasks for
|
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.
|
473
234
|
|
474
|
-
*
|
235
|
+
*Bryan Paxton*
|
475
236
|
|
476
|
-
*
|
237
|
+
* Avoid leaking the first relation we call `first` on, per model.
|
477
238
|
|
478
|
-
Fixes #
|
479
|
-
|
480
|
-
*Ivan Antropov*
|
239
|
+
Fixes #21921.
|
481
240
|
|
482
|
-
*
|
241
|
+
*Matthew Draper*, *Jean Boussier*
|
483
242
|
|
484
|
-
|
243
|
+
* Allow deserialization of Active Record models that were YAML encoded prior
|
244
|
+
to Rails 4.2
|
485
245
|
|
486
|
-
*
|
487
|
-
|
488
|
-
* `to_sql` on an association now matches the query that is actually executed, where it
|
489
|
-
could previously have incorrectly accrued additional conditions (e.g. as a result of
|
490
|
-
a previous query). CollectionProxy now always defers to the association scope's
|
491
|
-
`arel` method so the (incorrect) inherited one should be entirely concealed.
|
246
|
+
*Sean Griffin*
|
492
247
|
|
493
|
-
|
248
|
+
* Correctly apply `unscope` when preloading through associations.
|
494
249
|
|
495
|
-
*
|
250
|
+
*Jimmy Bourassa*
|
496
251
|
|
497
|
-
*
|
252
|
+
* Ensure `select` quotes aliased attributes, even when using `from`.
|
498
253
|
|
499
|
-
Fixes #
|
254
|
+
Fixes #21488
|
500
255
|
|
501
|
-
*
|
256
|
+
*Sean Griffin & @johanlunds*
|
502
257
|
|
503
|
-
*
|
258
|
+
* Correct query for PostgreSQL 8.2 compatibility.
|
504
259
|
|
505
|
-
|
260
|
+
*Ben Murphy*, *Matthew Draper*
|
506
261
|
|
507
|
-
|
262
|
+
* Uniqueness validator raises descriptive error when running on a persisted
|
263
|
+
record without primary key.
|
508
264
|
|
509
|
-
|
510
|
-
custom primary key that didn't save due to validation error.
|
511
|
-
|
512
|
-
Fixes #14393.
|
513
|
-
|
514
|
-
*Chris Finne*
|
515
|
-
|
516
|
-
* `rake db:structure:dump` only dumps schema information if the schema
|
517
|
-
migration table exists.
|
518
|
-
|
519
|
-
Fixes #14217.
|
265
|
+
Closes #21304.
|
520
266
|
|
521
267
|
*Yves Senn*
|
522
268
|
|
523
|
-
* Add support for `Relation` be passed as parameter on `QueryCache#select_all`.
|
524
|
-
|
525
|
-
Fixes #14361.
|
526
269
|
|
527
|
-
|
270
|
+
## Rails 4.2.4 (August 24, 2015) ##
|
528
271
|
|
529
|
-
*
|
530
|
-
related callbacks, such as `#after_commit`, were triggered when the
|
531
|
-
`has_one` object did not get saved to the db.
|
272
|
+
* Skip statement cache on through association reader.
|
532
273
|
|
533
|
-
|
274
|
+
If the through class has default scopes we should skip the statement
|
275
|
+
cache.
|
534
276
|
|
277
|
+
Closes #20745.
|
535
278
|
|
536
|
-
|
537
|
-
|
538
|
-
* No changes.
|
539
|
-
|
540
|
-
|
541
|
-
## Rails 4.1.0 (April 8, 2014) ##
|
279
|
+
*Rafael Mendonça França*
|
542
280
|
|
543
|
-
*
|
544
|
-
|
281
|
+
* Fixes #19420. When generating schema.rb using Postgres BigInt[] data type
|
282
|
+
the limit: 8 was not coming through. This caused it to become Int[] data type
|
283
|
+
after doing a rebuild off of schema.rb.
|
545
284
|
|
546
|
-
|
285
|
+
*Jake Waller*
|
547
286
|
|
548
|
-
|
287
|
+
* Fix state being carried over from previous transaction.
|
549
288
|
|
289
|
+
Considering the following example where `name` is a required attribute.
|
290
|
+
Before we had `new_record?` returning `true` for a persisted record:
|
550
291
|
|
551
|
-
|
292
|
+
author = Author.create! name: 'foo'
|
293
|
+
author.name = nil
|
294
|
+
author.save # => false
|
295
|
+
author.new_record? # => true
|
552
296
|
|
553
|
-
|
297
|
+
Fixes #20824.
|
554
298
|
|
555
|
-
|
299
|
+
*Roque Pinel*
|
556
300
|
|
557
|
-
|
301
|
+
* Correctly ignore `mark_for_destruction` when `autosave` isn't set to `true`
|
302
|
+
when validating associations.
|
558
303
|
|
559
|
-
|
560
|
-
authority.
|
304
|
+
Fixes #20882.
|
561
305
|
|
562
|
-
|
563
|
-
absolute URLs, respectively, are:
|
306
|
+
*Sean Griffin*
|
564
307
|
|
565
|
-
|
566
|
-
|
567
|
-
sqlite3:/full/path
|
308
|
+
* Fix through associations using scopes having the scope merged multiple
|
309
|
+
times.
|
568
310
|
|
569
|
-
|
570
|
-
|
571
|
-
release, that spelling will instead be interpreted as an absolute
|
572
|
-
path.
|
311
|
+
Fixes #20721.
|
312
|
+
Fixes #20727.
|
573
313
|
|
574
|
-
*
|
314
|
+
*Sean Griffin*
|
575
315
|
|
576
|
-
* `
|
316
|
+
* `ActiveRecord::Base.dump_schema_after_migration` applies migration tasks
|
317
|
+
other than `db:migrate`. (eg. `db:rollback`, `db:migrate:dup`, ...)
|
577
318
|
|
578
|
-
Fixes #
|
319
|
+
Fixes #20743.
|
579
320
|
|
580
321
|
*Yves Senn*
|
581
322
|
|
582
|
-
* `
|
583
|
-
|
584
|
-
|
585
|
-
Fixes #14109.
|
586
|
-
|
587
|
-
*Aaron Patterson*, *Yves Senn*
|
588
|
-
|
589
|
-
* Fixed error with validation with enum fields for records where the
|
590
|
-
value for any enum attribute is always evaluated as 0 during
|
591
|
-
uniqueness validation.
|
592
|
-
|
593
|
-
Fixes #14172.
|
594
|
-
|
595
|
-
*Vilius Luneckas* *Ahmed AbouElhamayed*
|
323
|
+
* Correctly raise `ActiveRecord::AssociationTypeMismatch` when assigning
|
324
|
+
a wrong type to a namespaced association.
|
596
325
|
|
597
|
-
|
598
|
-
`has_and_belongs_to_many` assocations *and* on `has_many :through`
|
599
|
-
associations. Before this change, `before_add` callbacks would be fired
|
600
|
-
before the record was saved on `has_and_belongs_to_many` associations, but
|
601
|
-
*not* on `has_many :through` associations.
|
326
|
+
Fixes #20545.
|
602
327
|
|
603
|
-
|
328
|
+
*Diego Carrion*
|
604
329
|
|
605
|
-
*
|
606
|
-
|
330
|
+
* Prevent error when using `force_reload: true` on an unassigned polymorphic
|
331
|
+
belongs_to association.
|
607
332
|
|
608
|
-
Fixes #
|
333
|
+
Fixes #20426.
|
609
334
|
|
610
|
-
*
|
335
|
+
*James Dabbs*
|
611
336
|
|
612
|
-
* Default scopes are no longer overriden by chained conditions.
|
613
337
|
|
614
|
-
|
615
|
-
it was overriden by chained conditions in the same field. Now it
|
616
|
-
is merged like any other scope.
|
338
|
+
## Rails 4.2.3 (June 25, 2015) ##
|
617
339
|
|
618
|
-
|
340
|
+
* Let `WITH` queries (Common Table Expressions) be explainable.
|
619
341
|
|
620
|
-
|
621
|
-
default_scope { where state: 'pending' }
|
622
|
-
scope :active, -> { where state: 'active' }
|
623
|
-
scope :inactive, -> { where state: 'inactive' }
|
624
|
-
end
|
342
|
+
*Vladimir Kochnev*
|
625
343
|
|
626
|
-
|
627
|
-
# SELECT "users".* FROM "users" WHERE "users"."state" = 'pending'
|
344
|
+
* Fix n+1 query problem when eager loading nil associations (fixes #18312)
|
628
345
|
|
629
|
-
|
630
|
-
# SELECT "users".* FROM "users" WHERE "users"."state" = 'active'
|
346
|
+
*Sammy Larbi*
|
631
347
|
|
632
|
-
|
633
|
-
|
348
|
+
* Fixed an error which would occur in dirty checking when calling
|
349
|
+
`update_attributes` from a getter.
|
634
350
|
|
635
|
-
|
351
|
+
Fixes #20531.
|
636
352
|
|
637
|
-
|
638
|
-
default_scope { where state: 'pending' }
|
639
|
-
scope :active, -> { where state: 'active' }
|
640
|
-
scope :inactive, -> { where state: 'inactive' }
|
641
|
-
end
|
353
|
+
*Sean Griffin*
|
642
354
|
|
643
|
-
|
644
|
-
|
355
|
+
* Ensure symbols passed to `ActiveRecord::Relation#select` are always treated
|
356
|
+
as columns.
|
645
357
|
|
646
|
-
|
647
|
-
# SELECT "users".* FROM "users" WHERE "users"."state" = 'pending' AND "users"."state" = 'active'
|
358
|
+
Fixes #20360.
|
648
359
|
|
649
|
-
|
650
|
-
# SELECT "users".* FROM "users" WHERE "users"."state" = 'pending' AND "users"."state" = 'inactive'
|
360
|
+
*Sean Griffin*
|
651
361
|
|
652
|
-
|
653
|
-
`default_scope` condition using `unscoped`, `unscope`, `rewhere` or
|
654
|
-
`except`.
|
362
|
+
* Clear query cache when `ActiveRecord::Base#reload` is called.
|
655
363
|
|
656
|
-
|
364
|
+
*Shane Hender*
|
657
365
|
|
658
|
-
|
659
|
-
|
660
|
-
scope :active, -> { unscope(where: :state).where(state: 'active') }
|
661
|
-
scope :inactive, -> { rewhere state: 'inactive' }
|
662
|
-
end
|
366
|
+
* Pass `:extend` option for `has_and_belongs_to_many` associations to the
|
367
|
+
underlying `has_many :through`.
|
663
368
|
|
664
|
-
|
665
|
-
# SELECT "users".* FROM "users" WHERE "users"."state" = 'pending'
|
369
|
+
*Jaehyun Shin*
|
666
370
|
|
667
|
-
|
668
|
-
# SELECT "users".* FROM "users" WHERE "users"."state" = 'active'
|
371
|
+
* Make `unscope` aware of "less than" and "greater than" conditions.
|
669
372
|
|
670
|
-
|
671
|
-
# SELECT "users".* FROM "users" WHERE "users"."state" = 'inactive'
|
373
|
+
*TAKAHASHI Kazuaki*
|
672
374
|
|
673
|
-
*
|
375
|
+
* Revert behavior of `db:schema:load` back to loading the full
|
376
|
+
environment. This ensures that initializers are run.
|
674
377
|
|
675
|
-
Fixes #
|
378
|
+
Fixes #19545.
|
676
379
|
|
677
|
-
*
|
380
|
+
*Yves Senn*
|
678
381
|
|
679
|
-
*
|
680
|
-
in multi-threaded environments.
|
382
|
+
* Fix missing index when using `timestamps` with the `index` option.
|
681
383
|
|
682
|
-
|
384
|
+
The `index` option used with `timestamps` should be passed to both
|
385
|
+
`column` definitions for `created_at` and `updated_at` rather than just
|
386
|
+
the first.
|
683
387
|
|
684
|
-
*
|
388
|
+
*Paul Mucur*
|
685
389
|
|
686
|
-
*
|
687
|
-
the columns.
|
390
|
+
* Rename `:class` to `:anonymous_class` in association options.
|
688
391
|
|
689
|
-
|
690
|
-
explicitly named then reverting the migration adding the named one
|
691
|
-
would instead drop the unnamed one.
|
392
|
+
Fixes #19659.
|
692
393
|
|
693
|
-
|
694
|
-
it is present.
|
394
|
+
*Andrew White*
|
695
395
|
|
696
|
-
|
396
|
+
* Fixed a bug where uniqueness validations would error on out of range values,
|
397
|
+
even if an validation should have prevented it from hitting the database.
|
697
398
|
|
698
|
-
*
|
399
|
+
*Andrey Voronkov*
|
699
400
|
|
700
|
-
|
701
|
-
|
702
|
-
end of migration rake task if `dump_schema_after_migration` is false.
|
401
|
+
* Foreign key related methods in the migration DSL respect
|
402
|
+
`ActiveRecord::Base.pluralize_table_names = false`.
|
703
403
|
|
704
|
-
|
404
|
+
Fixes #19643.
|
705
405
|
|
706
|
-
*
|
707
|
-
return an `Enumerator` that can calculate its size.
|
406
|
+
*Mehmet Emin İNAÇ*
|
708
407
|
|
709
|
-
|
408
|
+
* Reduce memory usage from loading types on pg.
|
710
409
|
|
711
|
-
|
410
|
+
Fixes #19578.
|
712
411
|
|
713
|
-
*
|
412
|
+
*Sean Griffin*
|
714
413
|
|
715
|
-
|
716
|
-
|
414
|
+
* Fix referencing wrong table aliases while joining tables of has many through
|
415
|
+
association (only when calling calculation methods).
|
717
416
|
|
718
|
-
Fixes #
|
417
|
+
Fixes #19276.
|
719
418
|
|
720
|
-
*
|
419
|
+
*pinglamb*
|
721
420
|
|
722
|
-
*
|
723
|
-
the underlying `has_many :through` association.
|
421
|
+
* Don't attempt to update counter caches, when the column wasn't selected.
|
724
422
|
|
725
|
-
Fixes #
|
423
|
+
Fixes #19437.
|
726
424
|
|
727
|
-
*
|
425
|
+
*Sean Griffin*
|
728
426
|
|
729
|
-
*
|
427
|
+
* Correctly persist a serialized attribute that has been returned to
|
428
|
+
its default value by an in-place modification.
|
730
429
|
|
731
|
-
|
732
|
-
not supported by the ActiveRecord schema dumper. For example, expressions
|
733
|
-
indexes would not be detected.
|
430
|
+
Fixes #19467.
|
734
431
|
|
735
|
-
|
432
|
+
*Matthew Draper*
|
736
433
|
|
737
|
-
|
434
|
+
* Fix default `format` value in `ActiveRecord::Tasks::DatabaseTasks#schema_file`.
|
738
435
|
|
739
|
-
*
|
436
|
+
*James Cox*
|
740
437
|
|
741
|
-
|
742
|
-
|
743
|
-
which would be incorrect. Now it will correctly produce `["1","","2","","3"]`
|
744
|
-
as the result of parsing the above PostgreSQL array.
|
438
|
+
* Dont enroll records in the transaction if they dont have commit callbacks.
|
439
|
+
That was causing a memory grow problem when creating a lot of records inside a transaction.
|
745
440
|
|
746
|
-
Fixes #
|
441
|
+
Fixes #15549.
|
747
442
|
|
748
|
-
*
|
443
|
+
*Will Bryant*, *Aaron Patterson*
|
749
444
|
|
750
|
-
*
|
445
|
+
* Correctly create through records when created on a has many through
|
446
|
+
association when using `where`.
|
751
447
|
|
752
|
-
|
753
|
-
defined by `ActiveRecord::Base`.
|
448
|
+
Fixes #19073.
|
754
449
|
|
755
|
-
|
450
|
+
*Sean Griffin*
|
756
451
|
|
757
|
-
class Car < ActiveRecord::Base
|
758
|
-
has_many :errors
|
759
|
-
end
|
760
|
-
# Will raise ArgumentError.
|
761
452
|
|
762
|
-
|
453
|
+
## Rails 4.2.2 (June 16, 2015) ##
|
763
454
|
|
764
|
-
|
455
|
+
* No Changes *
|
765
456
|
|
766
|
-
* Fix regressions on `select_*` methods.
|
767
|
-
When `select_*` methods receive a `Relation` object, they should be able to
|
768
|
-
get the arel/binds from it.
|
769
|
-
Also fix regressions on `select_rows` that was ignoring the binds.
|
770
457
|
|
771
|
-
|
458
|
+
## Rails 4.2.1 (March 19, 2015) ##
|
772
459
|
|
773
|
-
|
460
|
+
* Fixed ActiveRecord::Relation#becomes! and changed_attributes issues for type column
|
774
461
|
|
775
|
-
|
776
|
-
without issues.
|
462
|
+
Fixes #17139.
|
777
463
|
|
778
|
-
|
779
|
-
in an Active Record model that used serialization it would fail at the last
|
780
|
-
dump due to the fields not being correctly serialized before being dumped
|
781
|
-
to YAML. Now it is possible to dump and load the same object as many times
|
782
|
-
as needed without any issues.
|
464
|
+
*Miklos Fazekas*
|
783
465
|
|
784
|
-
|
466
|
+
* `remove_reference` with `foreign_key: true` removes the foreign key before
|
467
|
+
removing the column. This fixes a bug where it was not possible to remove
|
468
|
+
the column on MySQL.
|
785
469
|
|
786
|
-
|
470
|
+
Fixes #18664.
|
787
471
|
|
788
|
-
*
|
789
|
-
can be chained with other `Enumerable` methods.
|
472
|
+
*Yves Senn*
|
790
473
|
|
791
|
-
|
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.
|
792
477
|
|
793
|
-
*
|
478
|
+
*Sean Griffin*
|
794
479
|
|
795
|
-
|
796
|
-
with methods defined within `ActiveRecord::Base` but not its ancestors,
|
797
|
-
as well as conflicts with methods generated by other enums on the same
|
798
|
-
class.
|
480
|
+
* Fix rounding problem for PostgreSQL timestamp column.
|
799
481
|
|
800
|
-
|
482
|
+
If timestamp column have the precision, it need to format according to
|
483
|
+
the precision of timestamp column.
|
801
484
|
|
802
|
-
*
|
485
|
+
*Ryuta Kamizono*
|
803
486
|
|
804
|
-
*
|
487
|
+
* Respect the database default charset for `schema_migrations` table.
|
805
488
|
|
806
|
-
|
807
|
-
|
808
|
-
|
489
|
+
The charset of `version` column in `schema_migrations` table is depend
|
490
|
+
on the database default charset and collation rather than the encoding
|
491
|
+
of the connection.
|
809
492
|
|
810
|
-
|
493
|
+
*Ryuta Kamizono*
|
811
494
|
|
812
|
-
|
495
|
+
* Respect custom primary keys for associations when calling `Relation#where`
|
813
496
|
|
814
|
-
|
497
|
+
Fixes #18813.
|
815
498
|
|
816
|
-
|
817
|
-
# Before: SELECT * ... LIMIT 1 FOR UPDATE
|
818
|
-
# After: SELECT * ... LIMIT 1 FOR SHARE NOWAIT
|
499
|
+
*Sean Griffin*
|
819
500
|
|
820
|
-
|
501
|
+
* Fixed several edge cases which could result in a counter cache updating
|
502
|
+
twice or not updating at all for `has_many` and `has_many :through`.
|
821
503
|
|
822
|
-
|
504
|
+
Fixes #10865.
|
823
505
|
|
824
|
-
*
|
506
|
+
*Sean Griffin*
|
825
507
|
|
826
|
-
|
508
|
+
* Foreign keys added by migrations were given random, generated names. This
|
509
|
+
meant a different `structure.sql` would be generated every time a developer
|
510
|
+
ran migrations on their machine.
|
827
511
|
|
828
|
-
|
512
|
+
The generated part of foreign key names is now a hash of the table name and
|
513
|
+
column name, which is consistent every time you run the migration.
|
829
514
|
|
830
|
-
|
515
|
+
*Chris Sinjakli*
|
831
516
|
|
832
|
-
|
833
|
-
post.comments.reset
|
834
|
-
post.comments.loaded? # => true
|
517
|
+
* Fixed ActiveRecord::Relation#group method when argument is SQL reserved key word:
|
835
518
|
|
836
|
-
|
519
|
+
SplitTest.group(:key).count
|
520
|
+
Property.group(:value).count
|
837
521
|
|
838
|
-
|
839
|
-
post.comments.reset
|
840
|
-
post.comments.loaded? # => false
|
522
|
+
*Bogdan Gusiev*
|
841
523
|
|
842
|
-
|
524
|
+
* Don't define autosave association callbacks twice from
|
525
|
+
`accepts_nested_attributes_for`.
|
843
526
|
|
844
|
-
|
527
|
+
Fixes #18704.
|
845
528
|
|
846
|
-
*
|
529
|
+
*Sean Griffin*
|
847
530
|
|
848
|
-
|
531
|
+
* Integer types will no longer raise a `RangeError` when assigning an
|
532
|
+
attribute, but will instead raise when going to the database.
|
849
533
|
|
850
|
-
|
851
|
-
|
852
|
-
conversation.status = :archived
|
853
|
-
conversation.status_was # => 0
|
534
|
+
Fixes several vague issues which were never reported directly. See the
|
535
|
+
commit message from the commit which added this line for some examples.
|
854
536
|
|
855
|
-
|
537
|
+
*Sean Griffin*
|
856
538
|
|
857
|
-
|
858
|
-
|
859
|
-
|
860
|
-
|
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.
|
861
543
|
|
862
|
-
|
544
|
+
Fixes #18580.
|
863
545
|
|
864
|
-
*
|
865
|
-
anymore.
|
546
|
+
*Sean Griffin*
|
866
547
|
|
867
|
-
|
868
|
-
consistent results among different database engines. But for singular
|
869
|
-
associations this behavior is not needed since we will have one record to
|
870
|
-
return. As this ORDER BY option can lead some performance issues we are
|
871
|
-
removing it for singular associations accessors.
|
548
|
+
* Don't remove join dependencies in `Relation#exists?`
|
872
549
|
|
873
|
-
Fixes #
|
550
|
+
Fixes #18632.
|
874
551
|
|
875
|
-
*
|
552
|
+
*Sean Griffin*
|
876
553
|
|
877
|
-
*
|
554
|
+
* Invalid values assigned to a JSON column are assumed to be `nil`.
|
878
555
|
|
879
|
-
|
556
|
+
Fixes #18629.
|
880
557
|
|
881
|
-
|
882
|
-
# Before: => SELECT id FROM "posts"
|
883
|
-
# After: => SELECT "posts"."id" FROM "posts"
|
558
|
+
*Sean Griffin*
|
884
559
|
|
885
|
-
|
560
|
+
* No longer issue deprecation warning when including a scope with extensions.
|
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.
|
886
564
|
|
887
|
-
|
888
|
-
in `find_in_batches`.
|
565
|
+
Fixes #18467.
|
889
566
|
|
890
|
-
|
891
|
-
yielded to the block. This means that you only get it, when you hit the
|
892
|
-
`batch_size` treshold. This could shadow the issue in development.
|
567
|
+
*Yves Senn*
|
893
568
|
|
894
|
-
|
569
|
+
* Correctly use the type provided by `serialize` when updating records using
|
570
|
+
optimistic locking.
|
895
571
|
|
896
|
-
|
572
|
+
Fixes #18385.
|
897
573
|
|
898
|
-
|
899
|
-
(`first`, `second`, `third`, `fourth`, and `fifth`) are now available as
|
900
|
-
full-fledged finders in ActiveRecord. The biggest benefit of this is ordering
|
901
|
-
of the records returned now defaults to the table's primary key in ascending order.
|
574
|
+
*Sean Griffin*
|
902
575
|
|
903
|
-
|
576
|
+
* `attribute_will_change!` will no longer cause non-persistable attributes to
|
577
|
+
be sent to the database.
|
904
578
|
|
905
|
-
|
579
|
+
Fixes #18407.
|
906
580
|
|
907
|
-
|
581
|
+
*Sean Griffin*
|
908
582
|
|
909
|
-
|
910
|
-
# => 'SELECT "users".* FROM "users"'
|
583
|
+
* Format the datetime string according to the precision of the datetime field.
|
911
584
|
|
912
|
-
|
913
|
-
# => SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT 1 OFFSET 1'
|
585
|
+
Incompatible to rounding behavior between MySQL 5.6 and earlier.
|
914
586
|
|
915
|
-
|
587
|
+
In 5.5, when you insert `2014-08-17 12:30:00.999999` the fractional part
|
588
|
+
is ignored. In 5.6, it's rounded to `2014-08-17 12:30:01`:
|
916
589
|
|
917
|
-
|
918
|
-
# => 'SELECT "users".* FROM "users" LIMIT -1 OFFSET 3' # sqlite3 gem
|
919
|
-
# => 'SELECT "users".* FROM "users" OFFSET 3' # pg gem
|
920
|
-
# => 'SELECT `users`.* FROM `users` LIMIT 18446744073709551615 OFFSET 3' # mysql2 gem
|
590
|
+
http://bugs.mysql.com/bug.php?id=68760
|
921
591
|
|
922
|
-
|
923
|
-
# => SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT 1 OFFSET 4'
|
592
|
+
*Ryuta Kamizono*
|
924
593
|
|
925
|
-
|
594
|
+
* Allow precision option for MySQL datetimes.
|
926
595
|
|
927
|
-
*
|
928
|
-
models that did not define any transactional callbacks (i.e.
|
929
|
-
`after_commit`, `after_rollback` or `after_create`).
|
596
|
+
*Ryuta Kamizono*
|
930
597
|
|
931
|
-
|
598
|
+
* Clear query cache on rollback.
|
932
599
|
|
933
|
-
*
|
600
|
+
*Florian Weingarten*
|
934
601
|
|
935
|
-
*
|
602
|
+
* Fixed setting of foreign_key for through associations while building of new record.
|
936
603
|
|
937
|
-
|
604
|
+
Fixes #12698.
|
938
605
|
|
939
|
-
*
|
606
|
+
*Ivan Antropov*
|
940
607
|
|
941
|
-
|
608
|
+
* Fixed automatic inverse_of for models nested in module.
|
942
609
|
|
943
|
-
*
|
610
|
+
*Andrew McCloud*
|
944
611
|
|
945
|
-
*
|
612
|
+
* Fix `reaping_frequency` option when the value is a string.
|
946
613
|
|
947
|
-
|
948
|
-
the `inheritance_column` setting doesn't exist. This prevents setting associations
|
949
|
-
via the attributes hash if the association name clashes with the value of the setting,
|
950
|
-
typically `:type`. This worked previously in Rails 3.2.
|
614
|
+
This usually happens when it is configured using `DATABASE_URL`.
|
951
615
|
|
952
|
-
*
|
616
|
+
*korbin*
|
953
617
|
|
954
|
-
*
|
618
|
+
* Fix error message when trying to create an associated record and the foreign
|
619
|
+
key is missing.
|
955
620
|
|
956
|
-
|
621
|
+
Before this fix the following exception was being raised:
|
957
622
|
|
958
|
-
|
959
|
-
enum status: [ :active, :archived ]
|
960
|
-
end
|
623
|
+
NoMethodError: undefined method `val' for #<Arel::Nodes::BindParam:0x007fc64d19c218>
|
961
624
|
|
962
|
-
|
625
|
+
Now the message is:
|
963
626
|
|
964
|
-
|
627
|
+
ActiveRecord::UnknownAttributeError: unknown attribute 'foreign_key' for Model.
|
965
628
|
|
966
|
-
|
629
|
+
*Rafael Mendonça França*
|
967
630
|
|
968
|
-
|
631
|
+
* Fix change detection problem for PostgreSQL bytea type and
|
632
|
+
`ArgumentError: string contains null byte` exception with pg-0.18.
|
969
633
|
|
970
|
-
|
634
|
+
Fixes #17680.
|
971
635
|
|
972
|
-
*
|
636
|
+
*Lars Kanis*
|
973
637
|
|
974
|
-
|
638
|
+
* When a table has a composite primary key, the `primary_key` method for
|
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.
|
975
642
|
|
976
|
-
|
643
|
+
Fixes #18070.
|
977
644
|
|
978
|
-
|
645
|
+
*arthurnn*
|
979
646
|
|
980
|
-
|
647
|
+
* Ensure `first!` and friends work on loaded associations.
|
981
648
|
|
982
|
-
|
983
|
-
`DATABASE_URL` or by manually injecting a hash of values which is what Rails does,
|
984
|
-
reading in `database.yml` and setting Active Record appropriately. Active Record
|
985
|
-
expects to be able to use `DATABASE_URL` without the use of Rails, and we cannot
|
986
|
-
rip out this functionality without deprecating. This presents a problem though
|
987
|
-
when both config is set, and a `DATABASE_URL` is present. Currently the
|
988
|
-
`DATABASE_URL` should "win" and none of the values in `database.yml` are
|
989
|
-
used. This is somewhat unexpected, if one were to set values such as
|
990
|
-
`pool` in the `production:` group of `database.yml` they are ignored.
|
649
|
+
Fixes #18237.
|
991
650
|
|
992
|
-
|
651
|
+
*Sean Griffin*
|
993
652
|
|
994
|
-
|
995
|
-
- `rake db:<tasks>`
|
996
|
-
- `ActiveRecord.establish_connection`
|
653
|
+
* Dump the default `nil` for PostgreSQL UUID primary key.
|
997
654
|
|
998
|
-
|
999
|
-
- `rake db:<tasks>`
|
1000
|
-
- `rails <server> | <console>`
|
1001
|
-
- `rails dbconsole`
|
655
|
+
*Ryuta Kamizono*
|
1002
656
|
|
1003
|
-
|
1004
|
-
|
657
|
+
* Don't raise when writing an attribute with an out-of-range datetime passed
|
658
|
+
by the user.
|
1005
659
|
|
1006
|
-
|
660
|
+
*Grey Baker*
|
1007
661
|
|
1008
|
-
|
1009
|
-
|
1010
|
-
No DATABASE_URL
|
1011
|
-
=> Error
|
1012
|
-
```
|
662
|
+
* Fixes bug with 'ActiveRecord::Type::Numeric' that causes negative values to
|
663
|
+
be marked as having changed when set to the same negative value.
|
1013
664
|
|
1014
|
-
|
1015
|
-
database.yml present
|
1016
|
-
No DATABASE_URL
|
1017
|
-
=> Use database.yml configuration
|
1018
|
-
```
|
665
|
+
Fixes #18161.
|
1019
666
|
|
1020
|
-
|
1021
|
-
No database.yml
|
1022
|
-
DATABASE_URL present
|
1023
|
-
=> use DATABASE_URL configuration
|
1024
|
-
```
|
667
|
+
*Daniel Fox*
|
1025
668
|
|
1026
|
-
```
|
1027
|
-
database.yml present
|
1028
|
-
DATABASE_URL present
|
1029
|
-
=> Merged into `url` sub key. If both specify `url` sub key, the `database.yml` `url`
|
1030
|
-
sub key "wins". If other paramaters `adapter` or `database` are specified in YAML,
|
1031
|
-
they are discarded as the `url` sub key "wins".
|
1032
|
-
```
|
1033
669
|
|
1034
|
-
|
1035
|
-
all connection information before returning. This is achieved through a utility
|
1036
|
-
class: `ActiveRecord::ConnectionHandling::MergeAndResolveDefaultUrlConfig`.
|
670
|
+
## Rails 4.2.0 (December 20, 2014) ##
|
1037
671
|
|
1038
|
-
|
1039
|
-
|
672
|
+
* Introduce `force: :cascade` option for `create_table`. Using this option
|
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.
|
1040
676
|
|
1041
|
-
*
|
677
|
+
*Matthew Draper*, *Yves Senn*
|
1042
678
|
|
1043
|
-
*
|
679
|
+
* `db:schema:load` and `db:structure:load` no longer purge the database
|
680
|
+
before loading the schema. This is left for the user to do.
|
681
|
+
`db:test:prepare` will still purge the database.
|
1044
682
|
|
1045
|
-
|
683
|
+
Fixes #17945.
|
1046
684
|
|
1047
|
-
*
|
685
|
+
*Yves Senn*
|
1048
686
|
|
1049
|
-
|
1050
|
-
create or drop both the test and development databases.
|
687
|
+
* Fix undesirable RangeError by Type::Integer. Add Type::UnsignedInteger.
|
1051
688
|
|
1052
|
-
|
1053
|
-
the test database.
|
689
|
+
*Ryuta Kamizono*
|
1054
690
|
|
1055
|
-
|
691
|
+
* Add `foreign_type` option to `has_one` and `has_many` association macros.
|
1056
692
|
|
1057
|
-
|
1058
|
-
and it will be included in the announce message.
|
693
|
+
This option enables to define the column name of associated object's type for polymorphic associations.
|
1059
694
|
|
1060
|
-
*
|
695
|
+
*Ulisses Almeida, Kassio Borges*
|
1061
696
|
|
1062
|
-
* `
|
1063
|
-
|
1064
|
-
This ensures that `change_table` and `create_table` will use
|
1065
|
-
similar objects.
|
697
|
+
* `add_timestamps` and `remove_timestamps` now properly reversible with
|
698
|
+
options.
|
1066
699
|
|
1067
|
-
|
700
|
+
*Noam Gagliardi-Rabinovich*
|
1068
701
|
|
1069
|
-
|
702
|
+
* Bring back `db:test:prepare` to synchronize the test database schema.
|
1070
703
|
|
1071
|
-
|
1072
|
-
|
704
|
+
Manual synchronization using `bin/rake db:test:prepare` is required
|
705
|
+
when a migration is rolled-back, edited and reapplied.
|
1073
706
|
|
1074
|
-
|
707
|
+
`ActiveRecord::Base.maintain_test_schema` now uses `db:test:prepare`
|
708
|
+
to synchronize the schema. Plugins can use this task as a hook to
|
709
|
+
provide custom behavior after the schema has been loaded.
|
1075
710
|
|
1076
|
-
|
711
|
+
NOTE: `test:prepare` runs before the schema is synchronized.
|
1077
712
|
|
1078
|
-
|
1079
|
-
and `ActiveRecord::Base.symbolized_sti_name` without replacement.
|
713
|
+
Fixes #17171, #15787.
|
1080
714
|
|
1081
715
|
*Yves Senn*
|
1082
716
|
|
1083
|
-
*
|
1084
|
-
your test schema, the `rake db:test:*` tasks are deprecated. This
|
1085
|
-
doesn't stop you manually running other tasks on your test database
|
1086
|
-
if needed:
|
717
|
+
* Change `reflections` public api to return the keys as String objects.
|
1087
718
|
|
1088
|
-
|
719
|
+
Fixes #16928.
|
1089
720
|
|
1090
|
-
*
|
721
|
+
*arthurnn*
|
1091
722
|
|
1092
|
-
*
|
723
|
+
* Renaming a table in pg also renames the primary key index.
|
1093
724
|
|
1094
|
-
|
725
|
+
Fixes #12856
|
1095
726
|
|
1096
|
-
*
|
1097
|
-
raising a NoMethodError internally by calling `reflect_on_association` for `NilClass:Class`.
|
727
|
+
*Sean Griffin*
|
1098
728
|
|
1099
|
-
|
729
|
+
* Make it possible to access fixtures excluded by a `default_scope`.
|
1100
730
|
|
1101
|
-
*
|
731
|
+
*Yves Senn*
|
1102
732
|
|
1103
|
-
*
|
733
|
+
* Fix preloading of associations with a scope containing joins along with
|
734
|
+
conditions on the joined association.
|
1104
735
|
|
1105
|
-
|
736
|
+
*Siddharth Sharma*
|
1106
737
|
|
1107
|
-
|
1108
|
-
enum gender: [:female, :male]
|
1109
|
-
end
|
738
|
+
* Add `Table#name` to match `TableDefinition#name`.
|
1110
739
|
|
1111
|
-
|
740
|
+
*Cody Cutrer*
|
1112
741
|
|
1113
|
-
|
1114
|
-
|
1115
|
-
|
1116
|
-
conversation.gender # => "female"
|
742
|
+
* Cache `CollectionAssociation#reader` proxies separately before and after
|
743
|
+
the owner has been saved so that the proxy is not cached without the
|
744
|
+
owner's id.
|
1117
745
|
|
1118
|
-
|
1119
|
-
conversation.gender = nil
|
1120
|
-
conversation.gender.nil? # => true
|
1121
|
-
conversation.gender # => nil
|
746
|
+
*Ben Woosley*
|
1122
747
|
|
1123
|
-
|
748
|
+
* `ActiveRecord::ReadOnlyRecord` now has a descriptive message.
|
1124
749
|
|
1125
|
-
*
|
1126
|
-
key is expected to contain a database URL. The database URL will be
|
1127
|
-
expanded into a hash and merged.
|
750
|
+
*Franky W.*
|
1128
751
|
|
1129
|
-
|
752
|
+
* Fix preloading of associations which unscope a default scope.
|
1130
753
|
|
1131
|
-
|
754
|
+
Fixes #11036.
|
1132
755
|
|
1133
|
-
|
756
|
+
*Byron Bischoff*
|
1134
757
|
|
1135
|
-
|
758
|
+
* Added SchemaDumper support for tables with jsonb columns.
|
1136
759
|
|
1137
|
-
|
1138
|
-
# => 'SELECT `users`.* FROM `users` WHERE (NOT (NULL))'
|
760
|
+
*Ted O'Meara*
|
1139
761
|
|
1140
|
-
|
1141
|
-
|
762
|
+
* Deprecate `sanitize_sql_hash_for_conditions` without replacement. Using a
|
763
|
+
`Relation` for performing queries and updates is the prefered API.
|
1142
764
|
|
1143
|
-
*
|
765
|
+
*Sean Griffin*
|
1144
766
|
|
1145
|
-
*
|
1146
|
-
|
767
|
+
* Queries now properly type cast values that are part of a join statement,
|
768
|
+
even when using type decorators such as `serialize`.
|
1147
769
|
|
1148
|
-
*
|
770
|
+
*Melanie Gilman & Sean Griffin*
|
1149
771
|
|
1150
|
-
*
|
1151
|
-
|
772
|
+
* MySQL enum type lookups, with values matching another type, no longer result
|
773
|
+
in an endless loop.
|
1152
774
|
|
1153
|
-
Fixes #
|
775
|
+
Fixes #17402.
|
1154
776
|
|
1155
|
-
*
|
777
|
+
*Yves Senn*
|
1156
778
|
|
1157
|
-
*
|
779
|
+
* Raise `ArgumentError` when the body of a scope is not callable.
|
1158
780
|
|
1159
|
-
|
1160
|
-
particular column, for instance AR attribute query methods has a branch
|
1161
|
-
like this:
|
781
|
+
*Mauro George*
|
1162
782
|
|
1163
|
-
|
1164
|
-
!value.zero?
|
1165
|
-
end
|
783
|
+
* Use type column first in multi-column indexes created with `add-reference`.
|
1166
784
|
|
1167
|
-
|
1168
|
-
as running [].zero?, which results in a NoMethodError exception.
|
785
|
+
*Derek Prior*
|
1169
786
|
|
1170
|
-
|
1171
|
-
true for number?/text? checks.
|
787
|
+
* Fix `Relation.rewhere` to work with Range values.
|
1172
788
|
|
1173
|
-
*
|
789
|
+
*Dan Olson*
|
1174
790
|
|
1175
|
-
*
|
1176
|
-
`ActiveRecord::NoDatabaseError` will now be raised. When being used with Rails
|
1177
|
-
the error message will include information on how to create a database:
|
1178
|
-
`rake db:create`. Supported adapters: postgresql, mysql, mysql2, sqlite3
|
791
|
+
* `AR::UnknownAttributeError` now includes the class name of a record.
|
1179
792
|
|
1180
|
-
|
793
|
+
User.new(name: "Yuki Nishijima", project_attributes: {name: "kaminari"})
|
794
|
+
# => ActiveRecord::UnknownAttributeError: unknown attribute 'name' for User.
|
1181
795
|
|
1182
|
-
*
|
1183
|
-
already destroyed `belongs_to` association with `touch: true` option.
|
796
|
+
*Yuki Nishijima*
|
1184
797
|
|
1185
|
-
|
798
|
+
* Fix a regression causing `after_create` callbacks to run before associated
|
799
|
+
records are autosaved.
|
1186
800
|
|
1187
|
-
|
801
|
+
Fixes #17209.
|
1188
802
|
|
1189
|
-
|
1190
|
-
comment.post.destroy
|
1191
|
-
comment.destroy # no longer raises an error
|
803
|
+
*Agis Anastasopoulos*
|
1192
804
|
|
1193
|
-
|
805
|
+
* Honor overridden `rack.test` in Rack environment for the connection
|
806
|
+
management middleware.
|
1194
807
|
|
1195
|
-
*
|
1196
|
-
PostgreSQL integer array column.
|
808
|
+
*Simon Eskildsen*
|
1197
809
|
|
1198
|
-
|
810
|
+
* Add a truncate method to the connection.
|
1199
811
|
|
1200
|
-
|
812
|
+
*Aaron Patterson*
|
1201
813
|
|
1202
|
-
|
1203
|
-
Book.new(ratings: [1, 2]) # worked before
|
1204
|
-
Book.new(ratings: ['1', '2']) # now works as well
|
814
|
+
* Don't autosave unchanged has_one through records.
|
1205
815
|
|
1206
|
-
*
|
816
|
+
*Alan Kennedy*, *Steve Parrington*
|
1207
817
|
|
1208
|
-
*
|
818
|
+
* Do not dump foreign keys for ignored tables.
|
1209
819
|
|
1210
|
-
|
820
|
+
*Yves Senn*
|
1211
821
|
|
1212
|
-
|
1213
|
-
|
1214
|
-
values(
|
1215
|
-
5152
|
1216
|
-
)
|
822
|
+
* PostgreSQL adapter correctly dumps foreign keys targeting tables
|
823
|
+
outside the schema search path.
|
1217
824
|
|
1218
|
-
|
1219
|
-
table name.
|
825
|
+
Fixes #16907.
|
1220
826
|
|
1221
|
-
*
|
827
|
+
*Matthew Draper*, *Yves Senn*
|
1222
828
|
|
1223
|
-
*
|
829
|
+
* When a thread is killed, rollback the active transaction, instead of
|
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.
|
1224
834
|
|
1225
|
-
|
835
|
+
*Chris Hanks*
|
1226
836
|
|
1227
|
-
* `
|
1228
|
-
|
837
|
+
* A `NullRelation` should represent nothing. This fixes a bug where
|
838
|
+
`Comment.where(post_id: Post.none)` returned a non-empty result.
|
1229
839
|
|
1230
|
-
|
1231
|
-
methods directly on the `Relation`.
|
840
|
+
Fixes #15176.
|
1232
841
|
|
1233
|
-
|
842
|
+
*Matthew Draper*, *Yves Senn*
|
1234
843
|
|
1235
|
-
|
1236
|
-
|
844
|
+
* Include default column limits in schema.rb. Allows defaults to be changed
|
845
|
+
in the future without affecting old migrations that assumed old defaults.
|
1237
846
|
|
1238
|
-
|
1239
|
-
authors = Author.where(name: 'Hank Moody').to_a
|
1240
|
-
authors.compact!
|
847
|
+
*Jeremy Kemper*
|
1241
848
|
|
1242
|
-
|
849
|
+
* MySQL: schema.rb now includes TEXT and BLOB column limits.
|
1243
850
|
|
1244
|
-
*
|
1245
|
-
association name.
|
851
|
+
*Jeremy Kemper*
|
1246
852
|
|
1247
|
-
|
1248
|
-
if the value was a single `ActiveRecord::Base` object. e.g.
|
853
|
+
* MySQL: correct LONGTEXT and LONGBLOB limits from 2GB to their true 4GB.
|
1249
854
|
|
1250
|
-
|
855
|
+
*Jeremy Kemper*
|
1251
856
|
|
1252
|
-
|
1253
|
-
generated. This change supports arguments in the `where` query
|
1254
|
-
conditions where the key is a `belongs_to` association name and the
|
1255
|
-
value is `nil`, an `Array` of `ActiveRecord::Base` objects, or an
|
1256
|
-
`ActiveRecord::Relation` object.
|
857
|
+
* SQLite3Adapter now checks for views in `table_exists?`. Fixes #14041.
|
1257
858
|
|
1258
|
-
|
1259
|
-
belongs_to :author
|
1260
|
-
end
|
859
|
+
*Girish Sonawane*
|
1261
860
|
|
1262
|
-
|
861
|
+
* Introduce `connection.supports_views?` to check whether the current adapter
|
862
|
+
has support for SQL views. Connection adapters should define this method.
|
1263
863
|
|
1264
|
-
|
1265
|
-
|
864
|
+
*Yves Senn*
|
865
|
+
|
866
|
+
* Allow included modules to override association methods.
|
1266
867
|
|
1267
|
-
|
1268
|
-
matches the ids of the passed ActiveRecord models, resulting
|
1269
|
-
in the same query as `Post.where(author_id: [1,2])`:
|
868
|
+
Fixes #16684.
|
1270
869
|
|
1271
|
-
|
1272
|
-
Post.where(author: authors_array)
|
1273
|
-
# SELECT "posts".* FROM "posts" WHERE "posts"."author_id" IN (1, 2)
|
870
|
+
*Yves Senn*
|
1274
871
|
|
1275
|
-
|
1276
|
-
|
872
|
+
* Schema loading rake tasks (like `db:schema:load` and `db:setup`) maintain
|
873
|
+
the database connection to the current environment.
|
1277
874
|
|
1278
|
-
|
1279
|
-
# SELECT "posts".* FROM "posts"
|
1280
|
-
# WHERE "posts"."author_id" IN (
|
1281
|
-
# SELECT "authors"."id" FROM "authors"
|
1282
|
-
# WHERE "authors"."last_name" = 'Emde')
|
875
|
+
Fixes #16757.
|
1283
876
|
|
1284
|
-
|
1285
|
-
appropriately, with the polymorphic `association_type` field added
|
1286
|
-
to the query to match the base class of the value. This feature
|
1287
|
-
previously only worked when the value was a single `ActveRecord::Base`.
|
877
|
+
*Joshua Cody*, *Yves Senn*
|
1288
878
|
|
1289
|
-
|
1290
|
-
belongs_to :author, polymorphic: true
|
1291
|
-
end
|
879
|
+
* MySQL: set the connection collation along with the charset.
|
1292
880
|
|
1293
|
-
|
1294
|
-
|
1295
|
-
|
881
|
+
Sets the connection collation to the database collation configured in
|
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.
|
1296
885
|
|
1297
|
-
|
886
|
+
This only applies to literal string comparisons, not column values, so it
|
887
|
+
is unlikely to affect you.
|
1298
888
|
|
1299
|
-
*
|
889
|
+
*Jeremy Kemper*
|
1300
890
|
|
1301
|
-
|
891
|
+
* `default_sequence_name` from the PostgreSQL adapter returns a `String`.
|
1302
892
|
|
1303
|
-
|
893
|
+
*Yves Senn*
|
1304
894
|
|
1305
|
-
|
895
|
+
* Fix a regression where whitespaces were stripped from DISTINCT queries in
|
896
|
+
PostgreSQL.
|
1306
897
|
|
1307
|
-
*
|
898
|
+
*Agis Anastasopoulos*
|
1308
899
|
|
1309
|
-
|
1310
|
-
as: "SELECT * FROM orders INNER JOIN line_items ON order_id=orders.id")
|
900
|
+
Fixes #16623.
|
1311
901
|
|
1312
|
-
|
902
|
+
* Fix has_many :through relation merging failing when dynamic conditions are
|
903
|
+
passed as a lambda with an arity of one.
|
1313
904
|
|
1314
|
-
|
1315
|
-
SELECT * FROM orders INNER JOIN line_items ON order_id=orders.id
|
905
|
+
Fixes #16128.
|
1316
906
|
|
1317
|
-
*
|
907
|
+
*Agis Anastasopoulos*
|
1318
908
|
|
1319
|
-
* `
|
909
|
+
* Fix `Relation#exists?` to work with polymorphic associations.
|
1320
910
|
|
1321
|
-
|
1322
|
-
so we need to load the Rails environment, otherwise the config wont be in place.
|
911
|
+
Fixes #15821.
|
1323
912
|
|
1324
|
-
*
|
913
|
+
*Kassio Borges*
|
1325
914
|
|
1326
|
-
*
|
915
|
+
* Currently, Active Record rescues any errors raised within
|
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.
|
1327
919
|
|
1328
|
-
|
920
|
+
This commit adds an opt-in flag to enable not rescuing the errors.
|
1329
921
|
|
1330
922
|
Example:
|
1331
923
|
|
1332
|
-
#
|
1333
|
-
|
1334
|
-
# => { '37signals' => '0.5' }
|
1335
|
-
|
1336
|
-
# After
|
1337
|
-
Account.group(:firm_name).sum('0.01 * credit_limit')
|
1338
|
-
# => { '37signals' => 0.5 }
|
924
|
+
# Do not swallow errors in after_commit/after_rollback callbacks.
|
925
|
+
config.active_record.raise_in_transactional_callbacks = true
|
1339
926
|
|
1340
|
-
|
927
|
+
Fixes #13460.
|
1341
928
|
|
1342
|
-
*
|
1343
|
-
the old and new owner correctly when moved between owners of different types.
|
929
|
+
*arthurnn*
|
1344
930
|
|
1345
|
-
|
931
|
+
* Fix an issue where custom accessor methods (such as those generated by
|
932
|
+
`enum`) with the same name as a global method are incorrectly overridden
|
933
|
+
when subclassing.
|
1346
934
|
|
1347
|
-
|
1348
|
-
belongs_to :rateable, polymorphic: true, touch: true
|
1349
|
-
end
|
935
|
+
Fixes #16288.
|
1350
936
|
|
1351
|
-
|
1352
|
-
rating.update_attributes rateable: Book.find(2) # => timestamps of Song(1) and Book(2) are updated
|
937
|
+
*Godfrey Chan*
|
1353
938
|
|
1354
|
-
|
939
|
+
* `*_was` and `changes` now work correctly for in-place attribute changes as
|
940
|
+
well.
|
1355
941
|
|
1356
|
-
*
|
1357
|
-
with line breaks before/after, and improve the error for pending migrations.
|
942
|
+
*Sean Griffin*
|
1358
943
|
|
1359
|
-
|
944
|
+
* Fix regression on `after_commit` that did not fire with nested transactions.
|
1360
945
|
|
1361
|
-
|
946
|
+
Fixes #16425.
|
1362
947
|
|
1363
|
-
|
948
|
+
*arthurnn*
|
1364
949
|
|
1365
|
-
|
1366
|
-
# => returns the 4th record from the end.
|
950
|
+
* Do not try to write timestamps when a table has no timestamps columns.
|
1367
951
|
|
1368
|
-
Fixes #
|
952
|
+
Fixes #8813.
|
1369
953
|
|
1370
|
-
*
|
954
|
+
*Sergey Potapov*
|
1371
955
|
|
1372
|
-
* `
|
1373
|
-
when using unmapped PostgreSQL array types.
|
956
|
+
* `index_exists?` with `:name` option does verify specified columns.
|
1374
957
|
|
1375
958
|
Example:
|
1376
959
|
|
1377
|
-
|
960
|
+
add_index :articles, :title, name: "idx_title"
|
1378
961
|
|
1379
|
-
|
962
|
+
# Before:
|
963
|
+
index_exists? :articles, :title, name: "idx_title" # => `true`
|
964
|
+
index_exists? :articles, :body, name: "idx_title" # => `true`
|
1380
965
|
|
1381
|
-
|
966
|
+
# After:
|
967
|
+
index_exists? :articles, :title, name: "idx_title" # => `true`
|
968
|
+
index_exists? :articles, :body, name: "idx_title" # => `false`
|
1382
969
|
|
1383
|
-
*
|
1384
|
-
after leaving the outer block instead of clearing it right after the inner block is finished.
|
970
|
+
*Yves Senn*, *Matthew Draper*
|
1385
971
|
|
1386
|
-
|
972
|
+
* `add_timestamps` and `t.timestamps` now require you to pass the `:null` option.
|
973
|
+
Not passing the option is deprecated but the default is still `null: true`.
|
974
|
+
With Rails 5 this will change to `null: false`.
|
1387
975
|
|
1388
|
-
*
|
1389
|
-
object. Helper methods used by multiple fixtures should be defined on the
|
1390
|
-
class object returned by `ActiveRecord::FixtureSet.context_class`.
|
976
|
+
*Sean Griffin*
|
1391
977
|
|
1392
|
-
|
978
|
+
* When calling `update_columns` on a record that is not persisted, the error
|
979
|
+
message now reflects whether that object is a new record or has been
|
980
|
+
destroyed.
|
1393
981
|
|
1394
|
-
*
|
1395
|
-
option, but never actually supported it. Now it will raise an `ArgumentError`
|
1396
|
-
when using `has_one` with `counter_cache`.
|
982
|
+
*Lachlan Sylvester*
|
1397
983
|
|
1398
|
-
|
984
|
+
* Define `id_was` to get the previous value of the primary key.
|
1399
985
|
|
1400
|
-
|
986
|
+
Currently when we call `id_was` and we have a custom primary key name,
|
987
|
+
Active Record will return the current value of the primary key. This
|
988
|
+
makes it impossible to correctly do an update operation if you change the
|
989
|
+
id.
|
1401
990
|
|
1402
|
-
|
991
|
+
Fixes #16413.
|
1403
992
|
|
1404
|
-
*
|
993
|
+
*Rafael Mendonça França*
|
1405
994
|
|
1406
|
-
|
995
|
+
* Deprecate `DatabaseTasks.load_schema` to act on the current connection.
|
996
|
+
Use `.load_schema_current` instead. In the future `load_schema` will
|
997
|
+
require the `configuration` to act on as an argument.
|
1407
998
|
|
1408
|
-
*
|
999
|
+
*Yves Senn*
|
1000
|
+
|
1001
|
+
* Fix automatic maintaining test schema to properly handle sql structure
|
1002
|
+
schema format.
|
1003
|
+
|
1004
|
+
Fixes #15394.
|
1409
1005
|
|
1410
|
-
*
|
1006
|
+
*Wojciech Wnętrzak*
|
1411
1007
|
|
1412
|
-
|
1008
|
+
* Fix type casting to Decimal from Float with large precision.
|
1413
1009
|
|
1414
|
-
*
|
1010
|
+
*Tomohiro Hashidate*
|
1415
1011
|
|
1416
|
-
* `
|
1417
|
-
rename indexes on columns with a foreign key and prevents the following error:
|
1012
|
+
* Deprecate `Reflection#source_macro`
|
1418
1013
|
|
1419
|
-
|
1014
|
+
`Reflection#source_macro` is no longer needed in Active Record
|
1015
|
+
source so it has been deprecated. Code that used `source_macro`
|
1016
|
+
was removed in #16353.
|
1420
1017
|
|
1421
|
-
*
|
1018
|
+
*Eileen M. Uchtitelle*, *Aaron Patterson*
|
1422
1019
|
|
1423
|
-
*
|
1424
|
-
marked with `dependent: destroy` fails to be destroyed.
|
1020
|
+
* No verbose backtrace by `db:drop` when database does not exist.
|
1425
1021
|
|
1426
|
-
Fixes #
|
1022
|
+
Fixes #16295.
|
1427
1023
|
|
1428
|
-
*
|
1024
|
+
*Kenn Ejima*
|
1429
1025
|
|
1430
|
-
*
|
1026
|
+
* Add support for PostgreSQL JSONB.
|
1431
1027
|
|
1432
|
-
|
1028
|
+
Example:
|
1433
1029
|
|
1434
|
-
|
1030
|
+
create_table :posts do |t|
|
1031
|
+
t.jsonb :meta_data
|
1032
|
+
end
|
1435
1033
|
|
1436
|
-
*
|
1034
|
+
*Philippe Creux*, *Chris Teague*
|
1437
1035
|
|
1438
|
-
*
|
1036
|
+
* `db:purge` with MySQL respects `Rails.env`.
|
1439
1037
|
|
1440
1038
|
*Yves Senn*
|
1441
1039
|
|
1442
|
-
*
|
1040
|
+
* `change_column_default :table, :column, nil` with PostgreSQL will issue a
|
1041
|
+
`DROP DEFAULT` instead of a `DEFAULT NULL` query.
|
1443
1042
|
|
1444
|
-
|
1043
|
+
Fixes #16261.
|
1445
1044
|
|
1446
|
-
*
|
1045
|
+
*Matthew Draper*, *Yves Senn*
|
1046
|
+
|
1047
|
+
* Allow to specify a type for the foreign key column in `references`
|
1048
|
+
and `add_reference`.
|
1447
1049
|
|
1448
1050
|
Example:
|
1449
1051
|
|
1450
|
-
|
1451
|
-
|
1052
|
+
change_table :vehicle do |t|
|
1053
|
+
t.references :station, type: :uuid
|
1452
1054
|
end
|
1453
1055
|
|
1454
|
-
|
1455
|
-
|
1456
|
-
|
1056
|
+
*Andrey Novikov*, *Łukasz Sarnacki*
|
1057
|
+
|
1058
|
+
* `create_join_table` removes a common prefix when generating the join table.
|
1059
|
+
This matches the existing behavior of HABTM associations.
|
1060
|
+
|
1061
|
+
Fixes #13683.
|
1457
1062
|
|
1458
|
-
*
|
1063
|
+
*Stefan Kanev*
|
1459
1064
|
|
1460
|
-
*
|
1065
|
+
* Do not swallow errors on `compute_type` when having a bad `alias_method` on
|
1066
|
+
a class.
|
1067
|
+
|
1068
|
+
*arthurnn*
|
1069
|
+
|
1070
|
+
* PostgreSQL invalid `uuid` are convert to nil.
|
1071
|
+
|
1072
|
+
*Abdelkader Boudih*
|
1073
|
+
|
1074
|
+
* Restore 4.0 behavior for using serialize attributes with `JSON` as coder.
|
1075
|
+
|
1076
|
+
With 4.1.x, `serialize` started returning a string when `JSON` was passed as
|
1077
|
+
the second attribute. It will now return a hash as per previous versions.
|
1461
1078
|
|
1462
1079
|
Example:
|
1463
1080
|
|
1464
|
-
Post
|
1465
|
-
|
1081
|
+
class Post < ActiveRecord::Base
|
1082
|
+
serialize :comment, JSON
|
1083
|
+
end
|
1084
|
+
|
1085
|
+
class Comment
|
1086
|
+
include ActiveModel::Model
|
1087
|
+
attr_accessor :category, :text
|
1466
1088
|
end
|
1467
1089
|
|
1468
|
-
|
1090
|
+
post = Post.create!
|
1091
|
+
post.comment = Comment.new(category: "Animals", text: "This is a comment about squirrels.")
|
1092
|
+
post.save!
|
1469
1093
|
|
1470
|
-
|
1471
|
-
|
1094
|
+
# 4.0
|
1095
|
+
post.comment # => {"category"=>"Animals", "text"=>"This is a comment about squirrels."}
|
1472
1096
|
|
1473
|
-
|
1097
|
+
# 4.1 before
|
1098
|
+
post.comment # => "#<Comment:0x007f80ab48ff98>"
|
1474
1099
|
|
1475
|
-
|
1100
|
+
# 4.1 after
|
1101
|
+
post.comment # => {"category"=>"Animals", "text"=>"This is a comment about squirrels."}
|
1476
1102
|
|
1477
|
-
|
1478
|
-
`
|
1103
|
+
When using `JSON` as the coder in `serialize`, Active Record will use the
|
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.
|
1479
1107
|
|
1480
|
-
|
1108
|
+
To keep the previous behaviour, supply a custom coder instead
|
1109
|
+
([example](https://gist.github.com/jenncoop/8c4142bbe59da77daa63)).
|
1481
1110
|
|
1482
|
-
|
1111
|
+
Fixes #15594.
|
1483
1112
|
|
1484
|
-
*
|
1113
|
+
*Jenn Cooper*
|
1485
1114
|
|
1486
|
-
|
1115
|
+
* Do not use `RENAME INDEX` syntax for MariaDB 10.0.
|
1487
1116
|
|
1488
|
-
|
1117
|
+
Fixes #15931.
|
1489
1118
|
|
1490
|
-
*
|
1491
|
-
transparent what values are actually sent to the database.
|
1119
|
+
*Jeff Browning*
|
1492
1120
|
|
1493
|
-
|
1494
|
-
|
1495
|
-
# After: ... WHERE "events"."id" = $1 LIMIT 1 [["id", 0]]
|
1121
|
+
* Calling `#empty?` on a `has_many` association would use the value from the
|
1122
|
+
counter cache if one exists.
|
1496
1123
|
|
1497
|
-
*
|
1124
|
+
*David Verhasselt*
|
1498
1125
|
|
1499
|
-
* Fix
|
1126
|
+
* Fix the schema dump generated for tables without constraints and with
|
1127
|
+
primary key with default value of custom PostgreSQL function result.
|
1500
1128
|
|
1501
|
-
Fixes #
|
1129
|
+
Fixes #16111.
|
1502
1130
|
|
1503
|
-
*
|
1131
|
+
*Andrey Novikov*
|
1504
1132
|
|
1505
|
-
*
|
1133
|
+
* Fix the SQL generated when a `delete_all` is run on an association to not
|
1134
|
+
produce an `IN` statements.
|
1506
1135
|
|
1507
|
-
|
1136
|
+
Before:
|
1508
1137
|
|
1509
|
-
|
1138
|
+
UPDATE "categorizations" SET "category_id" = NULL WHERE
|
1139
|
+
"categorizations"."category_id" = 1 AND "categorizations"."id" IN (1, 2)
|
1510
1140
|
|
1511
|
-
|
1141
|
+
After:
|
1512
1142
|
|
1513
|
-
|
1514
|
-
|
1515
|
-
Post.where(active: true).where(trashed: true).rewhere(trashed: false) #=> WHERE `active` = 1 AND `trashed` = 0
|
1143
|
+
UPDATE "categorizations" SET "category_id" = NULL WHERE
|
1144
|
+
"categorizations"."category_id" = 1
|
1516
1145
|
|
1517
|
-
*
|
1146
|
+
*Eileen M. Uchitelle, Aaron Patterson*
|
1518
1147
|
|
1519
|
-
*
|
1148
|
+
* Avoid type casting boolean and `ActiveSupport::Duration` values to numeric
|
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.
|
1520
1152
|
|
1521
1153
|
Example:
|
1522
1154
|
|
1523
|
-
|
1524
|
-
Person.find(5).cache_key(:updated_at, :last_reviewed_at)
|
1155
|
+
App.where(apikey: false) # => SELECT * FROM users WHERE apikey = '0'
|
1525
1156
|
|
1526
|
-
*
|
1157
|
+
*Dylan Thacker-Smith*
|
1527
1158
|
|
1528
|
-
*
|
1159
|
+
* Add a `:required` option to singular associations, providing a nicer
|
1160
|
+
API for presence validations on associations.
|
1529
1161
|
|
1530
|
-
|
1162
|
+
*Sean Griffin*
|
1531
1163
|
|
1532
|
-
|
1533
|
-
|
1534
|
-
end
|
1164
|
+
* Fix an error in `reset_counters` when associations have `select` scope.
|
1165
|
+
(Call to `count` generated invalid SQL.)
|
1535
1166
|
|
1536
|
-
|
1167
|
+
*Cade Truitt*
|
1537
1168
|
|
1538
|
-
|
1539
|
-
conversation.active!
|
1540
|
-
conversation.active? # => true
|
1541
|
-
conversation.status # => "active"
|
1169
|
+
* After a successful `reload`, `new_record?` is always false.
|
1542
1170
|
|
1543
|
-
|
1544
|
-
conversation.archived!
|
1545
|
-
conversation.archived? # => true
|
1546
|
-
conversation.status # => "archived"
|
1171
|
+
Fixes #12101.
|
1547
1172
|
|
1548
|
-
|
1549
|
-
conversation.status = :archived
|
1173
|
+
*Matthew Draper*
|
1550
1174
|
|
1551
|
-
|
1175
|
+
* PostgreSQL renaming table doesn't attempt to rename non existent sequences.
|
1552
1176
|
|
1553
|
-
*
|
1177
|
+
*Abdelkader Boudih*
|
1554
1178
|
|
1555
|
-
|
1179
|
+
* Move 'dependent: :destroy' handling for `belongs_to`
|
1180
|
+
from `before_destroy` to `after_destroy` callback chain
|
1556
1181
|
|
1557
|
-
|
1182
|
+
Fixes #12380.
|
1558
1183
|
|
1559
|
-
*
|
1184
|
+
*Ivan Antropov*
|
1560
1185
|
|
1561
|
-
*
|
1562
|
-
Fixed bug when providing `includes` in through association scope, and fetching targets.
|
1186
|
+
* Detect in-place modifications on String attributes.
|
1563
1187
|
|
1564
|
-
|
1188
|
+
Before this change, an attribute modified in-place had to be marked as
|
1189
|
+
changed in order for it to be persisted in the database. Now it is no longer
|
1190
|
+
required.
|
1565
1191
|
|
1566
|
-
|
1567
|
-
has_many :relationships, -> { includes(:user) }
|
1568
|
-
has_many :users, through: :relationships
|
1569
|
-
end
|
1192
|
+
Before:
|
1570
1193
|
|
1571
|
-
|
1194
|
+
user = User.first
|
1195
|
+
user.name << ' Griffin'
|
1196
|
+
user.name_will_change!
|
1197
|
+
user.save
|
1198
|
+
user.reload.name # => "Sean Griffin"
|
1572
1199
|
|
1573
|
-
|
1200
|
+
After:
|
1574
1201
|
|
1575
|
-
|
1202
|
+
user = User.first
|
1203
|
+
user.name << ' Griffin'
|
1204
|
+
user.save
|
1205
|
+
user.reload.name # => "Sean Griffin"
|
1576
1206
|
|
1577
|
-
|
1207
|
+
*Sean Griffin*
|
1578
1208
|
|
1579
|
-
|
1209
|
+
* Add `ActiveRecord::Base#validate!` that raises `RecordInvalid` if the record
|
1210
|
+
is invalid.
|
1580
1211
|
|
1581
|
-
|
1212
|
+
*Bogdan Gusiev*, *Marc Schütz*
|
1582
1213
|
|
1583
|
-
|
1214
|
+
* Support for adding and removing foreign keys. Foreign keys are now
|
1215
|
+
a part of `schema.rb`. This is supported by Mysql2Adapter, MysqlAdapter
|
1216
|
+
and PostgreSQLAdapter.
|
1584
1217
|
|
1585
|
-
|
1586
|
-
|
1218
|
+
Many thanks to *Matthew Higgins* for laying the foundation with his work on
|
1219
|
+
[foreigner](https://github.com/matthuhiggins/foreigner).
|
1587
1220
|
|
1588
1221
|
Example:
|
1589
1222
|
|
1590
|
-
|
1223
|
+
# within your migrations:
|
1224
|
+
add_foreign_key :articles, :authors
|
1225
|
+
remove_foreign_key :articles, :authors
|
1591
1226
|
|
1592
|
-
|
1593
|
-
x.tags # => {"string" => "foo", :symbol => :bar}
|
1227
|
+
*Yves Senn*
|
1594
1228
|
|
1595
|
-
|
1596
|
-
|
1229
|
+
* Fix subtle bugs regarding attribute assignment on models with no primary
|
1230
|
+
key. `'id'` will no longer be part of the attributes hash.
|
1597
1231
|
|
1598
|
-
*
|
1232
|
+
*Sean Griffin*
|
1599
1233
|
|
1600
|
-
*
|
1234
|
+
* Deprecate automatic counter caches on `has_many :through`. The behavior was
|
1235
|
+
broken and inconsistent.
|
1601
1236
|
|
1602
|
-
|
1237
|
+
*Sean Griffin*
|
1603
1238
|
|
1604
|
-
|
1239
|
+
* `preload` preserves readonly flag for associations.
|
1605
1240
|
|
1606
|
-
|
1607
|
-
all registered `stored_attributes`. Now every subclass of
|
1608
|
-
`ActiveRecord::Base` has it's own `Hash`.
|
1241
|
+
See #15853.
|
1609
1242
|
|
1610
1243
|
*Yves Senn*
|
1611
1244
|
|
1612
|
-
*
|
1245
|
+
* Assume numeric types have changed if they were assigned to a value that
|
1246
|
+
would fail numericality validation, regardless of the old value. Previously
|
1247
|
+
this would only occur if the old value was 0.
|
1613
1248
|
|
1614
|
-
|
1249
|
+
Example:
|
1615
1250
|
|
1616
|
-
|
1251
|
+
model = Model.create!(number: 5)
|
1252
|
+
model.number = '5wibble'
|
1253
|
+
model.number_changed? # => true
|
1617
1254
|
|
1618
|
-
|
1255
|
+
Fixes #14731.
|
1619
1256
|
|
1620
|
-
|
1257
|
+
*Sean Griffin*
|
1621
1258
|
|
1622
|
-
*
|
1623
|
-
|
1259
|
+
* `reload` no longer merges with the existing attributes.
|
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)`.
|
1624
1262
|
|
1625
|
-
|
1263
|
+
*Sean Griffin*
|
1626
1264
|
|
1627
|
-
|
1265
|
+
* The object returned from `select_all` must respond to `column_types`.
|
1266
|
+
If this is not the case a `NoMethodError` is raised.
|
1628
1267
|
|
1629
|
-
|
1268
|
+
*Sean Griffin*
|
1630
1269
|
|
1631
|
-
*
|
1632
|
-
spaces.
|
1270
|
+
* Detect in-place modifications of PG array types
|
1633
1271
|
|
1634
|
-
*
|
1272
|
+
*Sean Griffin*
|
1635
1273
|
|
1636
|
-
* `
|
1274
|
+
* Add `bin/rake db:purge` task to empty the current database.
|
1637
1275
|
|
1638
|
-
|
1639
|
-
operators, i.e. `Arel::Nodes::NotIn` and `Arel::Nodes::NotEqual` that have
|
1640
|
-
been generated through the use of `where.not`.
|
1276
|
+
*Yves Senn*
|
1641
1277
|
|
1642
|
-
|
1278
|
+
* Deprecate `serialized_attributes` without replacement.
|
1643
1279
|
|
1644
|
-
*
|
1280
|
+
*Sean Griffin*
|
1645
1281
|
|
1646
|
-
|
1282
|
+
* Correctly extract IPv6 addresses from `DATABASE_URI`: the square brackets
|
1283
|
+
are part of the URI structure, not the actual host.
|
1647
1284
|
|
1648
|
-
|
1285
|
+
Fixes #15705.
|
1649
1286
|
|
1650
|
-
*
|
1287
|
+
*Andy Bakun*, *Aaron Stone*
|
1651
1288
|
|
1652
|
-
*
|
1289
|
+
* Ensure both parent IDs are set on join records when both sides of a
|
1290
|
+
through association are new.
|
1653
1291
|
|
1654
|
-
*
|
1292
|
+
*Sean Griffin*
|
1655
1293
|
|
1656
|
-
* `
|
1294
|
+
* `ActiveRecord::Dirty` now detects in-place changes to mutable values.
|
1295
|
+
Serialized attributes on ActiveRecord models will no longer save when
|
1296
|
+
unchanged.
|
1657
1297
|
|
1658
|
-
|
1659
|
-
`Calculations`.
|
1298
|
+
Fixes #8328.
|
1660
1299
|
|
1661
|
-
*
|
1300
|
+
*Sean Griffin*
|
1662
1301
|
|
1663
|
-
* `
|
1302
|
+
* `Pluck` now works when selecting columns from different tables with the same
|
1303
|
+
name.
|
1664
1304
|
|
1665
|
-
|
1666
|
-
`scope_chain` for different associations. During processing
|
1667
|
-
these arrays are sometimes mutated and because of in-place
|
1668
|
-
mutation the changed `scope_chain` impacts other reflections.
|
1305
|
+
Fixes #15649.
|
1669
1306
|
|
1670
|
-
|
1307
|
+
*Sean Griffin*
|
1671
1308
|
|
1672
|
-
|
1309
|
+
* Remove `cache_attributes` and friends. All attributes are cached.
|
1673
1310
|
|
1674
|
-
*
|
1311
|
+
*Sean Griffin*
|
1675
1312
|
|
1676
|
-
*
|
1313
|
+
* Remove deprecated method `ActiveRecord::Base.quoted_locking_column`.
|
1677
1314
|
|
1678
|
-
|
1315
|
+
*Akshay Vishnoi*
|
1679
1316
|
|
1680
|
-
|
1317
|
+
* `ActiveRecord::FinderMethods.find` with block can handle proc parameter as
|
1318
|
+
`Enumerable#find` does.
|
1681
1319
|
|
1682
|
-
|
1683
|
-
method.
|
1320
|
+
Fixes #15382.
|
1684
1321
|
|
1685
|
-
|
1322
|
+
*James Yang*
|
1686
1323
|
|
1687
|
-
|
1688
|
-
Blog.where('id in (?)', Blog.where(id: 1))
|
1689
|
-
# => SELECT "blogs".* FROM "blogs" WHERE "blogs"."id" = 1
|
1690
|
-
# => SELECT "blogs".* FROM "blogs" WHERE (id IN (1))
|
1324
|
+
* Make timezone aware attributes work with PostgreSQL array columns.
|
1691
1325
|
|
1692
|
-
|
1693
|
-
Blog.where('id in (?)', Blog.where(id: 1).select(:id))
|
1694
|
-
# => SELECT "blogs".* FROM "blogs"
|
1695
|
-
# WHERE "blogs"."id" IN (SELECT "blogs"."id" FROM "blogs" WHERE "blogs"."id" = 1)
|
1326
|
+
Fixes #13402.
|
1696
1327
|
|
1697
|
-
|
1328
|
+
*Kuldeep Aggarwal*, *Sean Griffin*
|
1698
1329
|
|
1699
|
-
|
1330
|
+
* `ActiveRecord::SchemaMigration` has no primary key regardless of the
|
1331
|
+
`primary_key_prefix_type` configuration.
|
1700
1332
|
|
1701
|
-
|
1702
|
-
which is raised in `ActiveRecord::Associations::Preloader` class
|
1703
|
-
added owner record class name in order to simplify to find problem code.
|
1333
|
+
Fixes #15051.
|
1704
1334
|
|
1705
|
-
*
|
1335
|
+
*JoseLuis Torres*, *Yves Senn*
|
1706
1336
|
|
1707
|
-
* `
|
1708
|
-
`has_many :through`. Behavior should remain the same, if not, it is a bug.
|
1337
|
+
* `rake db:migrate:status` works with legacy migration numbers like `00018_xyz.rb`.
|
1709
1338
|
|
1710
|
-
|
1711
|
-
a savepoint name.
|
1339
|
+
Fixes #15538.
|
1712
1340
|
|
1713
1341
|
*Yves Senn*
|
1714
1342
|
|
1715
|
-
*
|
1343
|
+
* Baseclass becomes! subclass.
|
1716
1344
|
|
1717
|
-
|
1345
|
+
Before this change, a record which changed its STI type, could not be
|
1346
|
+
updated.
|
1718
1347
|
|
1719
|
-
|
1720
|
-
attributes of the where clause.
|
1348
|
+
Fixes #14785.
|
1721
1349
|
|
1722
|
-
|
1350
|
+
*Matthew Draper*, *Earl St Sauver*, *Edo Balvers*
|
1723
1351
|
|
1724
|
-
|
1352
|
+
* Remove deprecated `ActiveRecord::Migrator.proper_table_name`. Use the
|
1353
|
+
`proper_table_name` instance method on `ActiveRecord::Migration` instead.
|
1725
1354
|
|
1726
|
-
*
|
1727
|
-
when using `has_many` association with `:inverse_of` and finding an array of one element,
|
1728
|
-
it should return an array of one element too.
|
1355
|
+
*Akshay Vishnoi*
|
1729
1356
|
|
1730
|
-
|
1357
|
+
* Fix regression on eager loading association based on SQL query rather than
|
1358
|
+
existing column.
|
1731
1359
|
|
1732
|
-
|
1360
|
+
Fixes #15480.
|
1733
1361
|
|
1734
|
-
*
|
1362
|
+
*Lauro Caetano*, *Carlos Antonio da Silva*
|
1735
1363
|
|
1736
|
-
* `
|
1737
|
-
|
1364
|
+
* Deprecate returning `nil` from `column_for_attribute` when no column exists.
|
1365
|
+
It will return a null object in Rails 5.0
|
1738
1366
|
|
1739
|
-
|
1367
|
+
*Sean Griffin*
|
1740
1368
|
|
1741
|
-
|
1369
|
+
* Implemented `ActiveRecord::Base#pretty_print` to work with PP.
|
1742
1370
|
|
1743
|
-
*
|
1744
|
-
gets a `nil` argument. More specifically, it will throw an error if the
|
1745
|
-
argument that it gets passed does not respond to to `stringify_keys`.
|
1371
|
+
*Ethan*
|
1746
1372
|
|
1747
|
-
|
1373
|
+
* Preserve type when dumping PostgreSQL point, bit, bit varying and money
|
1374
|
+
columns.
|
1748
1375
|
|
1749
|
-
|
1376
|
+
*Yves Senn*
|
1750
1377
|
|
1751
|
-
|
1378
|
+
* New records remain new after YAML serialization.
|
1752
1379
|
|
1753
|
-
*
|
1380
|
+
*Sean Griffin*
|
1754
1381
|
|
1755
|
-
|
1382
|
+
* PostgreSQL support default values for enum types. Fixes #7814.
|
1756
1383
|
|
1757
|
-
*
|
1384
|
+
*Yves Senn*
|
1758
1385
|
|
1759
|
-
|
1386
|
+
* PostgreSQL `default_sequence_name` respects schema. Fixes #7516.
|
1760
1387
|
|
1761
|
-
*
|
1388
|
+
*Yves Senn*
|
1762
1389
|
|
1763
|
-
*
|
1764
|
-
|
1390
|
+
* Fix `columns_for_distinct` of PostgreSQL adapter to work correctly
|
1391
|
+
with orders without sort direction modifiers.
|
1765
1392
|
|
1766
|
-
|
1393
|
+
*Nikolay Kondratyev*
|
1767
1394
|
|
1768
|
-
|
1395
|
+
* PostgreSQL `reset_pk_sequence!` respects schemas. Fixes #14719.
|
1769
1396
|
|
1770
|
-
*
|
1771
|
-
where constraints and at least of them is not `Arel::Nodes::Equality`,
|
1772
|
-
generates invalid SQL expression.
|
1397
|
+
*Yves Senn*
|
1773
1398
|
|
1774
|
-
|
1399
|
+
* Keep PostgreSQL `hstore` and `json` attributes as `Hash` in `@attributes`.
|
1400
|
+
Fixes duplication in combination with `store_accessor`.
|
1775
1401
|
|
1776
|
-
|
1402
|
+
Fixes #15369.
|
1777
1403
|
|
1778
|
-
*
|
1779
|
-
query to fetch results rather than loading the entire collection.
|
1404
|
+
*Yves Senn*
|
1780
1405
|
|
1781
|
-
|
1406
|
+
* `rake railties:install:migrations` respects the order of railties.
|
1782
1407
|
|
1783
|
-
*
|
1408
|
+
*Arun Agrawal*
|
1784
1409
|
|
1785
|
-
|
1410
|
+
* Fix redefine a `has_and_belongs_to_many` inside inherited class
|
1411
|
+
Fixing regression case, where redefining the same `has_and_belongs_to_many`
|
1412
|
+
definition into a subclass would raise.
|
1786
1413
|
|
1787
|
-
|
1414
|
+
Fixes #14983.
|
1788
1415
|
|
1789
|
-
*
|
1416
|
+
*arthurnn*
|
1790
1417
|
|
1791
|
-
* Fix
|
1418
|
+
* Fix `has_and_belongs_to_many` public reflection.
|
1419
|
+
When defining a `has_and_belongs_to_many`, internally we convert that to two has_many.
|
1420
|
+
But as `reflections` is a public API, people expect to see the right macro.
|
1792
1421
|
|
1793
|
-
Fixes #
|
1422
|
+
Fixes #14682.
|
1794
1423
|
|
1795
|
-
*
|
1424
|
+
*arthurnn*
|
1796
1425
|
|
1797
|
-
*
|
1798
|
-
transaction.
|
1426
|
+
* Fix serialization for records with an attribute named `format`.
|
1799
1427
|
|
1800
|
-
|
1428
|
+
Fixes #15188.
|
1801
1429
|
|
1802
|
-
*
|
1430
|
+
*Godfrey Chan*
|
1803
1431
|
|
1804
|
-
|
1432
|
+
* When a `group` is set, `sum`, `size`, `average`, `minimum` and `maximum`
|
1433
|
+
on a NullRelation should return a Hash.
|
1805
1434
|
|
1806
|
-
*
|
1435
|
+
*Kuldeep Aggarwal*
|
1807
1436
|
|
1808
|
-
|
1437
|
+
* Fix serialized fields returning serialized data after being updated with
|
1438
|
+
`update_column`.
|
1809
1439
|
|
1810
|
-
*
|
1811
|
-
accept objects other than direct descendants of `ActiveRecord::Base` (decorated
|
1812
|
-
models, for example).
|
1440
|
+
*Simon Hørup Eskildsen*
|
1813
1441
|
|
1814
|
-
|
1442
|
+
* Fix polymorphic eager loading when using a String as foreign key.
|
1815
1443
|
|
1816
|
-
|
1817
|
-
parentheses (eg. `($1.25) # => -1.25`)).
|
1818
|
-
Fixes #11899.
|
1444
|
+
Fixes #14734.
|
1819
1445
|
|
1820
|
-
*
|
1446
|
+
*Lauro Caetano*
|
1821
1447
|
|
1822
|
-
*
|
1823
|
-
common STRING datatype in SQL.
|
1448
|
+
* Change belongs_to touch to be consistent with timestamp updates
|
1824
1449
|
|
1825
|
-
|
1450
|
+
If a model is set up with a belongs_to: touch relationship the parent
|
1451
|
+
record will only be touched if the record was modified. This makes it
|
1452
|
+
consistent with timestamp updating on the record itself.
|
1826
1453
|
|
1827
|
-
*
|
1454
|
+
*Brock Trappitt*
|
1828
1455
|
|
1829
|
-
|
1456
|
+
* Fix the inferred table name of a `has_and_belongs_to_many` auxiliary
|
1457
|
+
table inside a schema.
|
1830
1458
|
|
1831
|
-
|
1459
|
+
Fixes #14824.
|
1832
1460
|
|
1833
|
-
|
1461
|
+
*Eric Chahin*
|
1834
1462
|
|
1835
|
-
|
1836
|
-
|
1463
|
+
* Remove unused `:timestamp` type. Transparently alias it to `:datetime`
|
1464
|
+
in all cases. Fixes inconsistencies when column types are sent outside of
|
1465
|
+
`ActiveRecord`, such as for XML Serialization.
|
1837
1466
|
|
1838
|
-
|
1839
|
-
record.logged_in_from_ip = 'bad ip address' # raise exception
|
1467
|
+
*Sean Griffin*
|
1840
1468
|
|
1841
|
-
|
1842
|
-
|
1843
|
-
record.logged_in_from_ip # => nil
|
1844
|
-
record.logged_in_from_ip_before_type_cast # => 'bad ip address'
|
1469
|
+
* Fix bug that added `table_name_prefix` and `table_name_suffix` to
|
1470
|
+
extension names in PostgreSQL when migrating.
|
1845
1471
|
|
1846
|
-
*
|
1472
|
+
*Joao Carlos*
|
1847
1473
|
|
1848
|
-
* `
|
1474
|
+
* The `:index` option in migrations, which previously was only available for
|
1475
|
+
`references`, now works with any column types.
|
1849
1476
|
|
1850
|
-
|
1477
|
+
*Marc Schütz*
|
1851
1478
|
|
1852
|
-
|
1479
|
+
* Add support for counter name to be passed as parameter on `CounterCache::ClassMethods#reset_counters`.
|
1853
1480
|
|
1854
|
-
*
|
1855
|
-
assignment of `has_many` associations, when the association was not
|
1856
|
-
yet loaded:
|
1481
|
+
*jnormore*
|
1857
1482
|
|
1858
|
-
|
1859
|
-
|
1483
|
+
* Restrict deletion of record when using `delete_all` with `uniq`, `group`, `having`
|
1484
|
+
or `offset`.
|
1860
1485
|
|
1861
|
-
|
1862
|
-
|
1863
|
-
loading of the association
|
1486
|
+
In these cases the generated query ignored them and that caused unintended
|
1487
|
+
records to be deleted.
|
1864
1488
|
|
1865
|
-
|
1489
|
+
Fixes #11985.
|
1866
1490
|
|
1867
|
-
*
|
1491
|
+
*Leandro Facchinetti*
|
1868
1492
|
|
1869
|
-
|
1493
|
+
* Floats with limit >= 25 that get turned into doubles in MySQL no longer have
|
1494
|
+
their limit dropped from the schema.
|
1870
1495
|
|
1871
|
-
|
1872
|
-
with reading from the database.
|
1496
|
+
Fixes #14135.
|
1873
1497
|
|
1874
|
-
|
1498
|
+
*Aaron Nelson*
|
1875
1499
|
|
1876
|
-
|
1500
|
+
* Fix how to calculate associated class name when using namespaced `has_and_belongs_to_many`
|
1501
|
+
association.
|
1877
1502
|
|
1878
|
-
|
1879
|
-
x.tags # => {"bool" => true, "number" => 5}
|
1503
|
+
Fixes #14709.
|
1880
1504
|
|
1881
|
-
|
1882
|
-
x.tags # => {"bool" => "true", "number" => "5"}
|
1505
|
+
*Kassio Borges*
|
1883
1506
|
|
1884
|
-
|
1507
|
+
* `ActiveRecord::Relation::Merger#filter_binds` now compares equivalent symbols and
|
1508
|
+
strings in column names as equal.
|
1885
1509
|
|
1886
|
-
|
1510
|
+
This fixes a rare case in which more bind values are passed than there are
|
1511
|
+
placeholders for them in the generated SQL statement, which can make PostgreSQL
|
1512
|
+
throw a `StatementInvalid` exception.
|
1887
1513
|
|
1888
|
-
*
|
1514
|
+
*Nat Budin*
|
1889
1515
|
|
1890
|
-
*
|
1516
|
+
* Fix `stored_attributes` to correctly merge the details of stored
|
1517
|
+
attributes defined in parent classes.
|
1891
1518
|
|
1892
|
-
Fixes #
|
1519
|
+
Fixes #14672.
|
1893
1520
|
|
1894
|
-
*
|
1521
|
+
*Brad Bennett*, *Jessica Yao*, *Lakshmi Parthasarathy*
|
1895
1522
|
|
1896
|
-
*
|
1523
|
+
* `change_column_default` allows `[]` as argument to `change_column_default`.
|
1897
1524
|
|
1898
|
-
|
1525
|
+
Fixes #11586.
|
1899
1526
|
|
1900
|
-
*
|
1527
|
+
*Yves Senn*
|
1901
1528
|
|
1902
|
-
|
1529
|
+
* Handle `name` and `"char"` column types in the PostgreSQL adapter.
|
1903
1530
|
|
1904
|
-
|
1905
|
-
|
1531
|
+
`name` and `"char"` are special character types used internally by
|
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.
|
1906
1535
|
|
1907
|
-
*
|
1536
|
+
*J Smith*, *Yves Senn*
|
1908
1537
|
|
1909
|
-
*
|
1910
|
-
|
1538
|
+
* Fix `PostgreSQLAdapter::OID::Float#type_cast` to convert Infinity and
|
1539
|
+
NaN PostgreSQL values into a native Ruby `Float::INFINITY` and `Float::NAN`
|
1911
1540
|
|
1912
1541
|
Before:
|
1913
1542
|
|
1914
|
-
|
1915
|
-
#
|
1543
|
+
Point.create(value: 1.0/0)
|
1544
|
+
Point.last.value # => 0.0
|
1916
1545
|
|
1917
1546
|
After:
|
1918
1547
|
|
1919
|
-
|
1920
|
-
#
|
1548
|
+
Point.create(value: 1.0/0)
|
1549
|
+
Point.last.value # => Infinity
|
1921
1550
|
|
1922
|
-
|
1551
|
+
*Innokenty Mikhailov*
|
1923
1552
|
|
1924
|
-
*
|
1925
|
-
For example, adding a very vendor specific regex implementation:
|
1553
|
+
* Allow the PostgreSQL adapter to handle bigserial primary key types again.
|
1926
1554
|
|
1927
|
-
|
1928
|
-
Arel::Nodes::InfixOperation.new('~', column, value.source)
|
1929
|
-
end
|
1930
|
-
ActiveRecord::PredicateBuilder.register_handler(Regexp, regex_handler)
|
1555
|
+
Fixes #10410.
|
1931
1556
|
|
1932
|
-
*
|
1557
|
+
*Patrick Robertson*
|
1933
1558
|
|
1934
|
-
*
|
1559
|
+
* Deprecate joining, eager loading and preloading of instance dependent
|
1560
|
+
associations without replacement. These operations happen before instances
|
1561
|
+
are created. The current behavior is unexpected and can result in broken
|
1562
|
+
behavior.
|
1935
1563
|
|
1936
|
-
|
1937
|
-
By enforcing the provision of the column for this internal method
|
1938
|
-
we ensure that those using adapters that require column information
|
1939
|
-
will always get the proper behavior.
|
1564
|
+
Fixes #15024.
|
1940
1565
|
|
1941
|
-
*
|
1566
|
+
*Yves Senn*
|
1942
1567
|
|
1943
|
-
*
|
1944
|
-
to allow the connection adapter to properly determine how to quote the value. This was
|
1945
|
-
affecting certain databases that use specific column types.
|
1568
|
+
* Fix `has_and_belongs_to_many` CollectionAssociation size calculations.
|
1946
1569
|
|
1947
|
-
|
1570
|
+
`has_and_belongs_to_many` should fall back to using the normal CollectionAssociation's
|
1571
|
+
size calculation if the collection is not cached or loaded.
|
1948
1572
|
|
1949
|
-
|
1573
|
+
Fixes #14913, #14914.
|
1950
1574
|
|
1951
|
-
*
|
1575
|
+
*Fred Wu*
|
1952
1576
|
|
1953
|
-
|
1577
|
+
* Return a non zero status when running `rake db:migrate:status` and migration table does
|
1578
|
+
not exist.
|
1954
1579
|
|
1955
|
-
|
1956
|
-
not rescue from Exception (but only from StandardError), the Connection
|
1957
|
-
Pool quickly runs out of connections when multiple erroneous Requests come
|
1958
|
-
in right after each other.
|
1580
|
+
*Paul B.*
|
1959
1581
|
|
1960
|
-
|
1961
|
-
behaviour.
|
1582
|
+
* Add support for module-level `table_name_suffix` in models.
|
1962
1583
|
|
1963
|
-
|
1584
|
+
This makes `table_name_suffix` work the same way as `table_name_prefix` when
|
1585
|
+
using namespaced models.
|
1964
1586
|
|
1965
|
-
*
|
1587
|
+
*Jenner LaFave*
|
1966
1588
|
|
1967
|
-
|
1589
|
+
* Revert the behaviour of `ActiveRecord::Relation#join` changed through 4.0 => 4.1 to 4.0.
|
1968
1590
|
|
1969
|
-
|
1591
|
+
In 4.1.0 `Relation#join` is delegated to `Arel#SelectManager`.
|
1592
|
+
In 4.0 series it is delegated to `Array#join`.
|
1970
1593
|
|
1971
|
-
*
|
1594
|
+
*Bogdan Gusiev*
|
1972
1595
|
|
1973
|
-
*
|
1596
|
+
* Log nil binary column values correctly.
|
1974
1597
|
|
1975
|
-
|
1598
|
+
When an object with a binary column is updated with a nil value
|
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.
|
1976
1605
|
|
1977
|
-
*
|
1606
|
+
*James Coleman*
|
1978
1607
|
|
1979
|
-
*
|
1980
|
-
|
1608
|
+
* Rails will now pass a custom validation context through to autosave associations
|
1609
|
+
in order to validate child associations with the same context.
|
1981
1610
|
|
1982
|
-
|
1983
|
-
self.column_defaults # if we call this unintentionally before setting locking_column ...
|
1984
|
-
self.locking_column = 'my_locking_column'
|
1985
|
-
end
|
1611
|
+
Fixes #13854.
|
1986
1612
|
|
1987
|
-
|
1988
|
-
=> nil # expected value is 0 !
|
1613
|
+
*Eric Chahin*, *Aaron Nelson*, *Kevin Casey*
|
1989
1614
|
|
1990
|
-
|
1615
|
+
* Stringify all variables keys of MySQL connection configuration.
|
1991
1616
|
|
1992
|
-
|
1993
|
-
|
1617
|
+
When `sql_mode` variable for MySQL adapters set in configuration as `String`
|
1618
|
+
was ignored and overwritten by strict mode option.
|
1994
1619
|
|
1995
|
-
Fixes #
|
1620
|
+
Fixes #14895.
|
1996
1621
|
|
1997
1622
|
*Paul Nikitochkin*
|
1998
1623
|
|
1999
|
-
*
|
2000
|
-
`primary_keys`, `tables`, `columns` and `columns_hash`.
|
1624
|
+
* Ensure SQLite3 statements are closed on errors.
|
2001
1625
|
|
2002
|
-
|
1626
|
+
Fixes #13631.
|
2003
1627
|
|
2004
|
-
*
|
1628
|
+
*Timur Alperovich*
|
2005
1629
|
|
2006
|
-
|
1630
|
+
* Give `ActiveRecord::PredicateBuilder` private methods the privacy they deserve.
|
2007
1631
|
|
2008
|
-
*
|
1632
|
+
*Hector Satre*
|
2009
1633
|
|
2010
|
-
|
1634
|
+
* When using a custom `join_table` name on a `habtm`, rails was not saving it
|
1635
|
+
on Reflections. This causes a problem when rails loads fixtures, because it
|
1636
|
+
uses the reflections to set database with fixtures.
|
2011
1637
|
|
2012
|
-
|
1638
|
+
Fixes #14845.
|
2013
1639
|
|
2014
|
-
*
|
1640
|
+
*Kassio Borges*
|
2015
1641
|
|
2016
|
-
*
|
2017
|
-
|
1642
|
+
* Reset the cache when modifying a Relation with cached Arel.
|
1643
|
+
Additionally display a warning message to make the user aware.
|
2018
1644
|
|
2019
|
-
*
|
1645
|
+
*Yves Senn*
|
2020
1646
|
|
2021
|
-
*
|
1647
|
+
* PostgreSQL should internally use `:datetime` consistently for TimeStamp. Assures
|
1648
|
+
different spellings of timestamps are treated the same.
|
2022
1649
|
|
2023
|
-
|
1650
|
+
Example:
|
2024
1651
|
|
2025
|
-
|
1652
|
+
mytimestamp.simplified_type('timestamp without time zone')
|
1653
|
+
# => :datetime
|
1654
|
+
mytimestamp.simplified_type('timestamp(6) without time zone')
|
1655
|
+
# => also :datetime (previously would be :timestamp)
|
2026
1656
|
|
2027
|
-
|
1657
|
+
See #14513.
|
2028
1658
|
|
2029
|
-
*
|
2030
|
-
method. You can use `#transaction_open?` instead.
|
1659
|
+
*Jefferson Lai*
|
2031
1660
|
|
2032
|
-
|
1661
|
+
* `ActiveRecord::Base.no_touching` no longer triggers callbacks or start empty transactions.
|
2033
1662
|
|
2034
|
-
|
2035
|
-
|
1663
|
+
Fixes #14841.
|
1664
|
+
|
1665
|
+
*Lucas Mazza*
|
2036
1666
|
|
2037
|
-
|
1667
|
+
* Fix name collision with `Array#select!` with `Relation#select!`.
|
2038
1668
|
|
2039
|
-
|
1669
|
+
Fixes #14752.
|
2040
1670
|
|
2041
|
-
*
|
1671
|
+
*Earl St Sauver*
|
2042
1672
|
|
2043
|
-
*
|
1673
|
+
* Fix unexpected behavior for `has_many :through` associations going through
|
1674
|
+
a scoped `has_many`.
|
2044
1675
|
|
2045
|
-
|
1676
|
+
If a `has_many` association is adjusted using a scope, and another
|
1677
|
+
`has_many :through` uses this association, then the scope adjustment is
|
1678
|
+
unexpectedly neglected.
|
2046
1679
|
|
2047
|
-
|
2048
|
-
suite. The class is no longer public and is only used for internal
|
2049
|
-
Rails tests.
|
1680
|
+
Fixes #14537.
|
2050
1681
|
|
2051
|
-
*
|
1682
|
+
*Jan Habermann*
|
2052
1683
|
|
2053
|
-
*
|
2054
|
-
in associations.
|
1684
|
+
* `@destroyed` should always be set to `false` when an object is duped.
|
2055
1685
|
|
2056
|
-
*
|
1686
|
+
*Kuldeep Aggarwal*
|
2057
1687
|
|
2058
|
-
*
|
1688
|
+
* Enable `has_many` associations to support irregular inflections.
|
2059
1689
|
|
2060
|
-
|
1690
|
+
Fixes #8928.
|
2061
1691
|
|
2062
|
-
*
|
1692
|
+
*arthurnn*, *Javier Goizueta*
|
2063
1693
|
|
2064
|
-
|
1694
|
+
* Fix `count` used with a grouping not returning a Hash.
|
2065
1695
|
|
2066
|
-
|
1696
|
+
Fixes #14721.
|
2067
1697
|
|
2068
|
-
*
|
1698
|
+
*Eric Chahin*
|
2069
1699
|
|
2070
|
-
*
|
1700
|
+
* `sanitize_sql_like` helper method to escape a string for safe use in an SQL
|
1701
|
+
LIKE statement.
|
2071
1702
|
|
2072
|
-
|
1703
|
+
Example:
|
2073
1704
|
|
2074
|
-
|
1705
|
+
class Article
|
1706
|
+
def self.search(term)
|
1707
|
+
where("title LIKE ?", sanitize_sql_like(term))
|
1708
|
+
end
|
1709
|
+
end
|
2075
1710
|
|
2076
|
-
|
1711
|
+
Article.search("20% _reduction_")
|
1712
|
+
# => Query looks like "... title LIKE '20\% \_reduction\_' ..."
|
2077
1713
|
|
2078
|
-
*
|
1714
|
+
*Rob Gilson*, *Yves Senn*
|
2079
1715
|
|
2080
|
-
|
2081
|
-
feature was deprecated in Rails 4.0. This is being removed.
|
2082
|
-
`delete_all` will continue to honor the `:dependent` option. However
|
2083
|
-
if `:dependent` value is `:destroy` then the `:delete_all` deletion
|
2084
|
-
strategy for that collection will be applied.
|
1716
|
+
* Do not quote uuid default value on `change_column`.
|
2085
1717
|
|
2086
|
-
|
2087
|
-
`delete_all`. For example you can do `@post.comments.delete_all(:nullify)`.
|
1718
|
+
Fixes #14604.
|
2088
1719
|
|
2089
|
-
*
|
1720
|
+
*Eric Chahin*
|
2090
1721
|
|
2091
|
-
*
|
1722
|
+
* The comparison between `Relation` and `CollectionProxy` should be consistent.
|
2092
1723
|
|
2093
|
-
|
1724
|
+
Example:
|
2094
1725
|
|
2095
|
-
|
1726
|
+
author.posts == Post.where(author_id: author.id)
|
1727
|
+
# => true
|
1728
|
+
Post.where(author_id: author.id) == author.posts
|
1729
|
+
# => true
|
2096
1730
|
|
2097
|
-
|
1731
|
+
Fixes #13506.
|
2098
1732
|
|
2099
|
-
*
|
2100
|
-
association.
|
1733
|
+
*Lauro Caetano*
|
2101
1734
|
|
2102
|
-
|
2103
|
-
collection
|
1735
|
+
* Calling `delete_all` on an unloaded `CollectionProxy` no longer
|
1736
|
+
generates an SQL statement containing each id of the collection:
|
2104
1737
|
|
2105
|
-
|
1738
|
+
Before:
|
2106
1739
|
|
2107
|
-
|
2108
|
-
|
1740
|
+
DELETE FROM `model` WHERE `model`.`parent_id` = 1
|
1741
|
+
AND `model`.`id` IN (1, 2, 3...)
|
2109
1742
|
|
2110
|
-
|
1743
|
+
After:
|
2111
1744
|
|
2112
|
-
|
1745
|
+
DELETE FROM `model` WHERE `model`.`parent_id` = 1
|
2113
1746
|
|
2114
|
-
*
|
1747
|
+
*Eileen M. Uchitelle*, *Aaron Patterson*
|
2115
1748
|
|
2116
|
-
*
|
1749
|
+
* Fix invalid SQL when aggregate methods (`empty?`, `any?`, `count`) used
|
1750
|
+
with `select`.
|
2117
1751
|
|
2118
|
-
|
1752
|
+
Fixes #13648.
|
2119
1753
|
|
2120
|
-
*
|
2121
|
-
`partial_updates=`.
|
1754
|
+
*Simon Woker*
|
2122
1755
|
|
2123
|
-
|
1756
|
+
* PostgreSQL adapter only warns once for every missing OID per connection.
|
2124
1757
|
|
2125
|
-
|
1758
|
+
Fixes #14275.
|
2126
1759
|
|
2127
|
-
*
|
1760
|
+
*Matthew Draper*, *Yves Senn*
|
2128
1761
|
|
2129
|
-
*
|
1762
|
+
* PostgreSQL adapter automatically reloads it's type map when encountering
|
1763
|
+
unknown OIDs.
|
2130
1764
|
|
2131
|
-
|
1765
|
+
Fixes #14678.
|
2132
1766
|
|
2133
|
-
*
|
1767
|
+
*Matthew Draper*, *Yves Senn*
|
2134
1768
|
|
2135
|
-
|
1769
|
+
* Fix insertion of records via `has_many :through` association with scope.
|
2136
1770
|
|
2137
|
-
|
2138
|
-
Comment.where('posts.author_id' => 7)
|
1771
|
+
Fixes #3548.
|
2139
1772
|
|
2140
|
-
|
2141
|
-
Comment.references(:posts).where('posts.author_id' => 7)
|
1773
|
+
*Ivan Antropov*
|
2142
1774
|
|
2143
|
-
|
1775
|
+
* Auto-generate stable fixture UUIDs on PostgreSQL.
|
2144
1776
|
|
2145
|
-
|
1777
|
+
Fixes #11524.
|
2146
1778
|
|
2147
|
-
|
2148
|
-
default_scope -> { where published: true }
|
2149
|
-
end
|
1779
|
+
*Roderick van Domburg*
|
2150
1780
|
|
2151
|
-
|
2152
|
-
|
2153
|
-
end
|
1781
|
+
* Fix a problem where an enum would overwrite values of another enum with the
|
1782
|
+
same name in an unrelated class.
|
2154
1783
|
|
2155
|
-
|
2156
|
-
comments on published posts, since that is the default scope for
|
2157
|
-
posts.
|
1784
|
+
Fixes #14607.
|
2158
1785
|
|
2159
|
-
|
2160
|
-
so we'd get comments on unpublished posts.
|
1786
|
+
*Evan Whalen*
|
2161
1787
|
|
2162
|
-
|
1788
|
+
* PostgreSQL and SQLite string columns no longer have a default limit of 255.
|
2163
1789
|
|
2164
|
-
|
1790
|
+
Fixes #13435, #9153.
|
2165
1791
|
|
2166
|
-
|
1792
|
+
*Vladimir Sazhin*, *Toms Mikoss*, *Yves Senn*
|
2167
1793
|
|
2168
|
-
*
|
1794
|
+
* Make possible to have an association called `records`.
|
2169
1795
|
|
2170
|
-
|
1796
|
+
Fixes #11645.
|
2171
1797
|
|
2172
|
-
*
|
2173
|
-
can be chained with other `Enumerable` methods.
|
1798
|
+
*prathamesh-sonpatki*
|
2174
1799
|
|
2175
|
-
|
1800
|
+
* `to_sql` on an association now matches the query that is actually executed, where it
|
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.
|
2176
1804
|
|
2177
|
-
|
2178
|
-
a block, so that it can be chained with other `Enumerable` methods.
|
1805
|
+
Fixes #14003.
|
2179
1806
|
|
2180
|
-
*
|
1807
|
+
*Jefferson Lai*
|
2181
1808
|
|
2182
|
-
*
|
1809
|
+
* Block a few default Class methods as scope name.
|
2183
1810
|
|
2184
|
-
|
2185
|
-
By flattening the array it ensures that string values are detected
|
2186
|
-
as strings and not arrays.
|
1811
|
+
For instance, this will raise:
|
2187
1812
|
|
2188
|
-
|
1813
|
+
scope :public, -> { where(status: 1) }
|
2189
1814
|
|
2190
|
-
*
|
1815
|
+
*arthurnn*
|
2191
1816
|
|
2192
|
-
*
|
1817
|
+
* Fix error when using `with_options` with lambda.
|
2193
1818
|
|
2194
|
-
|
2195
|
-
comments for the given post to set the inverse association.
|
1819
|
+
Fixes #9805.
|
2196
1820
|
|
2197
|
-
|
2198
|
-
records and all these 100k records would be loaded in memory
|
2199
|
-
even though the comment id was supplied.
|
1821
|
+
*Lauro Caetano*
|
2200
1822
|
|
2201
|
-
|
2202
|
-
|
1823
|
+
* Switch `sqlite3:///` URLs (which were temporarily
|
1824
|
+
deprecated in 4.1) from relative to absolute.
|
2203
1825
|
|
2204
|
-
|
1826
|
+
If you still want the previous interpretation, you should replace
|
1827
|
+
`sqlite3:///my/path` with `sqlite3:my/path`.
|
2205
1828
|
|
2206
|
-
*
|
1829
|
+
*Matthew Draper*
|
2207
1830
|
|
2208
|
-
*
|
2209
|
-
new connection. This means that calling `inspect`, when the
|
2210
|
-
database is missing, will no longer raise an exception.
|
2211
|
-
Fixes #10936.
|
1831
|
+
* Treat blank UUID values as `nil`.
|
2212
1832
|
|
2213
1833
|
Example:
|
2214
1834
|
|
2215
|
-
|
2216
|
-
|
2217
|
-
*Yves Senn*
|
1835
|
+
Sample.new(uuid_field: '') #=> <Sample id: nil, uuid_field: nil>
|
2218
1836
|
|
2219
|
-
*
|
2220
|
-
Fixes #10881.
|
1837
|
+
*Dmitry Lavrov*
|
2221
1838
|
|
2222
|
-
|
1839
|
+
* Enable support for materialized views on PostgreSQL >= 9.3.
|
2223
1840
|
|
2224
|
-
*
|
1841
|
+
*Dave Lee*
|
2225
1842
|
|
2226
|
-
|
2227
|
-
`WHERE "users"."name" = 'a b'` then in the log all the
|
2228
|
-
whitespace is being squeezed. So the sql that is printed in the
|
2229
|
-
log is `WHERE "users"."name" = 'a b'`.
|
1843
|
+
* The PostgreSQL adapter supports custom domains. Fixes #14305.
|
2230
1844
|
|
2231
|
-
|
1845
|
+
*Yves Senn*
|
2232
1846
|
|
2233
|
-
|
1847
|
+
* PostgreSQL `Column#type` is now determined through the corresponding OID.
|
1848
|
+
The column types stay the same except for enum columns. They no longer have
|
1849
|
+
`nil` as type but `enum`.
|
2234
1850
|
|
2235
|
-
|
2236
|
-
This is relevant when `ENV["DATABASE_URL"]` is used in place of a `database.yml`.
|
1851
|
+
See #7814.
|
2237
1852
|
|
2238
1853
|
*Yves Senn*
|
2239
1854
|
|
2240
|
-
* Fix
|
2241
|
-
|
1855
|
+
* Fix error when specifying a non-empty default value on a PostgreSQL array
|
1856
|
+
column.
|
2242
1857
|
|
2243
|
-
|
1858
|
+
Fixes #10613.
|
2244
1859
|
|
2245
|
-
*
|
2246
|
-
For example, you need to change this:
|
1860
|
+
*Luke Steensen*
|
2247
1861
|
|
2248
|
-
|
2249
|
-
|
2250
|
-
has_many :taggings, through: :posts
|
2251
|
-
end
|
1862
|
+
* Fix error where `.persisted?` throws SystemStackError for an unsaved model with a
|
1863
|
+
custom primary key that did not save due to validation error.
|
2252
1864
|
|
2253
|
-
|
2254
|
-
has_one :tagging
|
2255
|
-
has_many :taggings
|
2256
|
-
end
|
1865
|
+
Fixes #14393.
|
2257
1866
|
|
2258
|
-
|
2259
|
-
end
|
1867
|
+
*Chris Finne*
|
2260
1868
|
|
2261
|
-
|
1869
|
+
* Introduce `validate` as an alias for `valid?`.
|
2262
1870
|
|
2263
|
-
|
2264
|
-
has_many :posts
|
2265
|
-
has_many :taggings, through: :posts, source: :tagging
|
2266
|
-
end
|
1871
|
+
This is more intuitive when you want to run validations but don't care about the return value.
|
2267
1872
|
|
2268
|
-
|
2269
|
-
has_one :tagging
|
2270
|
-
has_many :taggings
|
2271
|
-
end
|
1873
|
+
*Henrik Nyh*
|
2272
1874
|
|
2273
|
-
|
2274
|
-
end
|
1875
|
+
* Create indexes inline in CREATE TABLE for MySQL.
|
2275
1876
|
|
2276
|
-
|
1877
|
+
This is important, because adding an index on a temporary table after it has been created
|
1878
|
+
would commit the transaction.
|
2277
1879
|
|
2278
|
-
|
2279
|
-
|
2280
|
-
Fixes #5554.
|
1880
|
+
It also allows creating and dropping indexed tables with fewer queries and fewer permissions
|
1881
|
+
required.
|
2281
1882
|
|
2282
1883
|
Example:
|
2283
1884
|
|
2284
|
-
|
2285
|
-
|
2286
|
-
# After => ActiveRecord::StatementInvalid
|
2287
|
-
|
2288
|
-
# you can still use `count(:all)` to perform a query unrelated to the
|
2289
|
-
# selected columns
|
2290
|
-
User.select("name, username").count(:all) # => SELECT count(*) FROM users
|
2291
|
-
|
2292
|
-
*Yves Senn*
|
2293
|
-
|
2294
|
-
* Rails now automatically detects inverse associations. If you do not set the
|
2295
|
-
`:inverse_of` option on the association, then Active Record will guess the
|
2296
|
-
inverse association based on heuristics.
|
2297
|
-
|
2298
|
-
Note that automatic inverse detection only works on `has_many`, `has_one`,
|
2299
|
-
and `belongs_to` associations. Extra options on the associations will
|
2300
|
-
also prevent the association's inverse from being found automatically.
|
2301
|
-
|
2302
|
-
The automatic guessing of the inverse association uses a heuristic based
|
2303
|
-
on the name of the class, so it may not work for all associations,
|
2304
|
-
especially the ones with non-standard names.
|
2305
|
-
|
2306
|
-
You can turn off the automatic detection of inverse associations by setting
|
2307
|
-
the `:inverse_of` option to `false` like so:
|
2308
|
-
|
2309
|
-
class Taggable < ActiveRecord::Base
|
2310
|
-
belongs_to :tag, inverse_of: false
|
1885
|
+
create_table :temp, temporary: true, as: "SELECT id, name, zip FROM a_really_complicated_query" do |t|
|
1886
|
+
t.index :zip
|
2311
1887
|
end
|
1888
|
+
# => CREATE TEMPORARY TABLE temp (INDEX (zip)) AS SELECT id, name, zip FROM a_really_complicated_query
|
2312
1889
|
|
2313
|
-
*
|
1890
|
+
*Cody Cutrer*, *Steve Rice*, *Rafael Mendonça Franca*
|
2314
1891
|
|
2315
|
-
*
|
1892
|
+
* Use singular table name in generated migrations when
|
1893
|
+
`ActiveRecord::Base.pluralize_table_names` is `false`.
|
2316
1894
|
|
2317
|
-
|
1895
|
+
Fixes #13426.
|
1896
|
+
|
1897
|
+
*Kuldeep Aggarwal*
|
2318
1898
|
|
2319
|
-
*
|
2320
|
-
explicitly to mark records as `readonly.
|
2321
|
-
Fixes #10615.
|
1899
|
+
* `touch` accepts many attributes to be touched at once.
|
2322
1900
|
|
2323
1901
|
Example:
|
2324
1902
|
|
2325
|
-
|
2326
|
-
|
2327
|
-
user.save! # will raise error
|
1903
|
+
# touches :signed_at, :sealed_at, and :updated_at/on attributes.
|
1904
|
+
Photo.last.touch(:signed_at, :sealed_at)
|
2328
1905
|
|
2329
|
-
*
|
1906
|
+
*James Pinto*
|
2330
1907
|
|
2331
|
-
*
|
1908
|
+
* `rake db:structure:dump` only dumps schema information if the schema
|
1909
|
+
migration table exists.
|
2332
1910
|
|
2333
|
-
Fixes #
|
1911
|
+
Fixes #14217.
|
2334
1912
|
|
2335
1913
|
*Yves Senn*
|
2336
1914
|
|
2337
|
-
*
|
1915
|
+
* Reap connections that were checked out by now-dead threads, instead
|
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.
|
2338
1920
|
|
2339
|
-
|
2340
|
-
|
2341
|
-
*Aaron Patterson*
|
1921
|
+
*Matthew Draper*
|
2342
1922
|
|
2343
|
-
*
|
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.
|
2344
1925
|
|
2345
|
-
*
|
1926
|
+
*Josh Williams*
|
2346
1927
|
|
2347
|
-
*
|
2348
|
-
as it is no longer used by internals.
|
1928
|
+
* `where.not` adds `references` for `includes` like normal `where` calls do.
|
2349
1929
|
|
2350
|
-
|
1930
|
+
Fixes #14406.
|
2351
1931
|
|
2352
|
-
*
|
2353
|
-
is not blank.
|
1932
|
+
*Yves Senn*
|
2354
1933
|
|
2355
|
-
|
2356
|
-
being picked up in `method_missing`.
|
1934
|
+
* Extend fixture `$LABEL` replacement to allow string interpolation.
|
2357
1935
|
|
2358
|
-
|
2359
|
-
table name, and calls `proper_table_name` on the arguments before sending to
|
2360
|
-
`connection`. If `table_name_prefix` or `table_name_suffix` is used, the schema
|
2361
|
-
version changes to `prefix_version_suffix`, breaking `rake test:prepare`.
|
1936
|
+
Example:
|
2362
1937
|
|
2363
|
-
|
1938
|
+
martin:
|
1939
|
+
email: $LABEL@email.com
|
2364
1940
|
|
2365
|
-
|
1941
|
+
users(:martin).email # => martin@email.com
|
2366
1942
|
|
2367
|
-
*
|
1943
|
+
*Eric Steele*
|
2368
1944
|
|
2369
|
-
|
1945
|
+
* Add support for `Relation` be passed as parameter on `QueryCache#select_all`.
|
2370
1946
|
|
2371
|
-
|
1947
|
+
Fixes #14361.
|
2372
1948
|
|
2373
|
-
*
|
1949
|
+
*arthurnn*
|
2374
1950
|
|
2375
|
-
*
|
2376
|
-
`
|
2377
|
-
causing `PredicateBuilder` to call non-existent method
|
2378
|
-
`Class#reflect_on_association`.
|
1951
|
+
* Passing an Active Record object to `find` or `exists?` is now deprecated.
|
1952
|
+
Call `.id` on the object first.
|
2379
1953
|
|
2380
|
-
*
|
1954
|
+
*Aaron Patterson*
|
2381
1955
|
|
2382
|
-
*
|
1956
|
+
* Only use BINARY for MySQL case sensitive uniqueness check when column
|
1957
|
+
has a case insensitive collation.
|
2383
1958
|
|
2384
|
-
|
2385
|
-
failing since options is an array and not a hash.
|
1959
|
+
*Ryuta Kamizono*
|
2386
1960
|
|
2387
|
-
|
2388
|
-
change_table :users do |t|
|
2389
|
-
t.remove_index [:name, :email]
|
2390
|
-
end
|
2391
|
-
end
|
1961
|
+
* Support for MySQL 5.6 fractional seconds.
|
2392
1962
|
|
2393
|
-
|
1963
|
+
*arthurnn*, *Tatsuhiko Miyagawa*
|
2394
1964
|
|
2395
|
-
|
1965
|
+
* Support for PostgreSQL `citext` data type enabling case-insensitive
|
1966
|
+
`where` values without needing to wrap in UPPER/LOWER sql functions.
|
2396
1967
|
|
2397
|
-
*
|
1968
|
+
*Troy Kruthoff*, *Lachlan Sylvester*
|
2398
1969
|
|
2399
|
-
*
|
1970
|
+
* Only save has_one associations if record has changes.
|
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.
|
2400
1973
|
|
2401
|
-
|
2402
|
-
child object yourself before assignment, then the NestedAttributes
|
2403
|
-
module will not overwrite it, e.g.:
|
1974
|
+
*Alan Kennedy*
|
2404
1975
|
|
2405
|
-
|
2406
|
-
has_one :avatar
|
2407
|
-
accepts_nested_attributes_for :avatar
|
1976
|
+
* Allow strings to specify the `#order` value.
|
2408
1977
|
|
2409
|
-
|
2410
|
-
super || build_avatar(width: 200)
|
2411
|
-
end
|
2412
|
-
end
|
1978
|
+
Example:
|
2413
1979
|
|
2414
|
-
|
2415
|
-
member.avatar_attributes = {icon: 'sad'}
|
2416
|
-
member.avatar.width # => 200
|
1980
|
+
Model.order(id: 'asc').to_sql == Model.order(id: :asc).to_sql
|
2417
1981
|
|
2418
|
-
*
|
1982
|
+
*Marcelo Casiraghi*, *Robin Dupret*
|
2419
1983
|
|
2420
|
-
*
|
2421
|
-
|
2422
|
-
unique value' database error that would occur if a record being created had
|
2423
|
-
the same value on a unique indexed field as that of a record being destroyed.
|
1984
|
+
* Dynamically register PostgreSQL enum OIDs. This prevents "unknown OID"
|
1985
|
+
warnings on enum columns.
|
2424
1986
|
|
2425
|
-
*
|
1987
|
+
*Dieter Komendera*
|
2426
1988
|
|
2427
|
-
*
|
1989
|
+
* `includes` is able to detect the right preloading strategy when string
|
1990
|
+
joins are involved.
|
2428
1991
|
|
2429
|
-
|
1992
|
+
Fixes #14109.
|
2430
1993
|
|
2431
|
-
|
1994
|
+
*Aaron Patterson*, *Yves Senn*
|
2432
1995
|
|
2433
|
-
|
2434
|
-
|
2435
|
-
end
|
1996
|
+
* Fix error with validation with enum fields for records where the value for
|
1997
|
+
any enum attribute is always evaluated as 0 during uniqueness validation.
|
2436
1998
|
|
2437
|
-
|
1999
|
+
Fixes #14172.
|
2438
2000
|
|
2439
|
-
|
2001
|
+
*Vilius Luneckas* *Ahmed AbouElhamayed*
|
2440
2002
|
|
2441
|
-
|
2003
|
+
* `before_add` callbacks are fired before the record is saved on
|
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.
|
2442
2008
|
|
2443
|
-
|
2009
|
+
Fixes #14144.
|
2444
2010
|
|
2445
|
-
|
2011
|
+
* Fix STI classes not defining an attribute method if there is a conflicting
|
2012
|
+
private method defined on its ancestors.
|
2446
2013
|
|
2447
|
-
|
2014
|
+
Fixes #11569.
|
2448
2015
|
|
2449
2016
|
*Godfrey Chan*
|
2450
2017
|
|
2451
|
-
*
|
2018
|
+
* Coerce strings when reading attributes. Fixes #10485.
|
2452
2019
|
|
2453
|
-
|
2020
|
+
Example:
|
2454
2021
|
|
2455
|
-
|
2022
|
+
book = Book.new(title: 12345)
|
2023
|
+
book.save!
|
2024
|
+
book.title # => "12345"
|
2456
2025
|
|
2457
|
-
|
2026
|
+
*Yves Senn*
|
2458
2027
|
|
2459
|
-
|
2028
|
+
* Deprecate half-baked support for PostgreSQL range values with excluding beginnings.
|
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.
|
2460
2031
|
|
2461
|
-
|
2032
|
+
The current solution of incrementing the beginning is not correct and is now
|
2033
|
+
deprecated. For subtypes where we don't know how to increment (e.g. `#succ`
|
2034
|
+
is not defined) it will raise an `ArgumentException` for ranges with excluding
|
2035
|
+
beginnings.
|
2462
2036
|
|
2463
|
-
*
|
2037
|
+
*Yves Senn*
|
2464
2038
|
|
2465
|
-
*
|
2039
|
+
* Support for user created range types in PostgreSQL.
|
2466
2040
|
|
2467
|
-
*
|
2041
|
+
*Yves Senn*
|
2468
2042
|
|
2469
|
-
Please check [4-
|
2043
|
+
Please check [4-1-stable](https://github.com/rails/rails/blob/4-1-stable/activerecord/CHANGELOG.md) for previous changes.
|