activerecord 4.2.11.3 → 5.0.0.1

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.

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