activerecord 4.2.0 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of activerecord might be problematic. Click here for more details.

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