activerecord 4.2.11.2 → 6.0.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of activerecord might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +613 -1638
- data/MIT-LICENSE +4 -2
- data/README.rdoc +13 -12
- data/examples/performance.rb +33 -32
- data/examples/simple.rb +5 -4
- data/lib/active_record.rb +41 -22
- data/lib/active_record/aggregations.rb +267 -251
- data/lib/active_record/association_relation.rb +11 -6
- data/lib/active_record/associations.rb +1737 -1597
- data/lib/active_record/associations/alias_tracker.rb +29 -35
- data/lib/active_record/associations/association.rb +125 -58
- data/lib/active_record/associations/association_scope.rb +103 -132
- data/lib/active_record/associations/belongs_to_association.rb +65 -60
- data/lib/active_record/associations/belongs_to_polymorphic_association.rb +8 -12
- data/lib/active_record/associations/builder/association.rb +27 -40
- data/lib/active_record/associations/builder/belongs_to.rb +69 -55
- data/lib/active_record/associations/builder/collection_association.rb +10 -33
- data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +52 -66
- data/lib/active_record/associations/builder/has_many.rb +8 -4
- data/lib/active_record/associations/builder/has_one.rb +46 -5
- data/lib/active_record/associations/builder/singular_association.rb +16 -10
- data/lib/active_record/associations/collection_association.rb +131 -287
- data/lib/active_record/associations/collection_proxy.rb +241 -146
- data/lib/active_record/associations/foreign_association.rb +10 -1
- data/lib/active_record/associations/has_many_association.rb +34 -97
- data/lib/active_record/associations/has_many_through_association.rb +60 -87
- data/lib/active_record/associations/has_one_association.rb +61 -49
- data/lib/active_record/associations/has_one_through_association.rb +20 -11
- data/lib/active_record/associations/join_dependency.rb +137 -167
- data/lib/active_record/associations/join_dependency/join_association.rb +38 -86
- data/lib/active_record/associations/join_dependency/join_base.rb +10 -9
- data/lib/active_record/associations/join_dependency/join_part.rb +14 -14
- data/lib/active_record/associations/preloader.rb +90 -92
- data/lib/active_record/associations/preloader/association.rb +90 -123
- data/lib/active_record/associations/preloader/through_association.rb +85 -65
- data/lib/active_record/associations/singular_association.rb +18 -39
- data/lib/active_record/associations/through_association.rb +38 -18
- data/lib/active_record/attribute_assignment.rb +56 -183
- data/lib/active_record/attribute_decorators.rb +39 -15
- data/lib/active_record/attribute_methods.rb +120 -135
- data/lib/active_record/attribute_methods/before_type_cast.rb +13 -8
- data/lib/active_record/attribute_methods/dirty.rb +174 -144
- data/lib/active_record/attribute_methods/primary_key.rb +91 -83
- data/lib/active_record/attribute_methods/query.rb +6 -5
- data/lib/active_record/attribute_methods/read.rb +20 -76
- data/lib/active_record/attribute_methods/serialization.rb +40 -20
- data/lib/active_record/attribute_methods/time_zone_conversion.rb +58 -36
- data/lib/active_record/attribute_methods/write.rb +32 -54
- data/lib/active_record/attributes.rb +214 -82
- data/lib/active_record/autosave_association.rb +91 -37
- data/lib/active_record/base.rb +57 -45
- data/lib/active_record/callbacks.rb +100 -74
- data/lib/active_record/coders/json.rb +3 -1
- data/lib/active_record/coders/yaml_column.rb +24 -12
- data/lib/active_record/connection_adapters/abstract/connection_pool.rb +796 -296
- data/lib/active_record/connection_adapters/abstract/database_limits.rb +26 -8
- data/lib/active_record/connection_adapters/abstract/database_statements.rb +234 -115
- data/lib/active_record/connection_adapters/abstract/query_cache.rb +82 -23
- data/lib/active_record/connection_adapters/abstract/quoting.rb +170 -53
- data/lib/active_record/connection_adapters/abstract/savepoints.rb +5 -3
- data/lib/active_record/connection_adapters/abstract/schema_creation.rb +74 -46
- data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +356 -227
- data/lib/active_record/connection_adapters/abstract/schema_dumper.rb +79 -36
- data/lib/active_record/connection_adapters/abstract/schema_statements.rb +664 -243
- data/lib/active_record/connection_adapters/abstract/transaction.rb +191 -83
- data/lib/active_record/connection_adapters/abstract_adapter.rb +460 -204
- data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +510 -635
- data/lib/active_record/connection_adapters/column.rb +56 -43
- data/lib/active_record/connection_adapters/connection_specification.rb +174 -152
- data/lib/active_record/connection_adapters/determine_if_preparable_visitor.rb +29 -0
- data/lib/active_record/connection_adapters/mysql/column.rb +27 -0
- data/lib/active_record/connection_adapters/mysql/database_statements.rb +200 -0
- data/lib/active_record/connection_adapters/mysql/explain_pretty_printer.rb +72 -0
- data/lib/active_record/connection_adapters/mysql/quoting.rb +81 -0
- data/lib/active_record/connection_adapters/mysql/schema_creation.rb +72 -0
- data/lib/active_record/connection_adapters/mysql/schema_definitions.rb +95 -0
- data/lib/active_record/connection_adapters/mysql/schema_dumper.rb +88 -0
- data/lib/active_record/connection_adapters/mysql/schema_statements.rb +264 -0
- data/lib/active_record/connection_adapters/mysql/type_metadata.rb +31 -0
- data/lib/active_record/connection_adapters/mysql2_adapter.rb +58 -180
- data/lib/active_record/connection_adapters/postgresql/column.rb +21 -11
- data/lib/active_record/connection_adapters/postgresql/database_statements.rb +64 -114
- data/lib/active_record/connection_adapters/postgresql/explain_pretty_printer.rb +44 -0
- data/lib/active_record/connection_adapters/postgresql/oid.rb +23 -25
- data/lib/active_record/connection_adapters/postgresql/oid/array.rb +50 -58
- data/lib/active_record/connection_adapters/postgresql/oid/bit.rb +9 -8
- data/lib/active_record/connection_adapters/postgresql/oid/bit_varying.rb +2 -0
- data/lib/active_record/connection_adapters/postgresql/oid/bytea.rb +4 -2
- data/lib/active_record/connection_adapters/postgresql/oid/cidr.rb +5 -1
- data/lib/active_record/connection_adapters/postgresql/oid/date.rb +13 -1
- data/lib/active_record/connection_adapters/postgresql/oid/date_time.rb +9 -22
- data/lib/active_record/connection_adapters/postgresql/oid/decimal.rb +3 -1
- data/lib/active_record/connection_adapters/postgresql/oid/enum.rb +5 -3
- data/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +31 -19
- data/lib/active_record/connection_adapters/postgresql/oid/inet.rb +2 -0
- data/lib/active_record/connection_adapters/postgresql/oid/jsonb.rb +3 -11
- data/lib/active_record/connection_adapters/postgresql/oid/legacy_point.rb +45 -0
- data/lib/active_record/connection_adapters/postgresql/oid/money.rb +7 -9
- data/lib/active_record/connection_adapters/postgresql/oid/{integer.rb → oid.rb} +6 -2
- data/lib/active_record/connection_adapters/postgresql/oid/point.rb +33 -11
- data/lib/active_record/connection_adapters/postgresql/oid/range.rb +52 -34
- data/lib/active_record/connection_adapters/postgresql/oid/specialized_string.rb +4 -5
- data/lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb +58 -54
- data/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +10 -5
- data/lib/active_record/connection_adapters/postgresql/oid/vector.rb +3 -1
- data/lib/active_record/connection_adapters/postgresql/oid/xml.rb +3 -1
- data/lib/active_record/connection_adapters/postgresql/quoting.rb +144 -47
- data/lib/active_record/connection_adapters/postgresql/referential_integrity.rb +27 -14
- data/lib/active_record/connection_adapters/postgresql/schema_creation.rb +76 -0
- data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +178 -108
- data/lib/active_record/connection_adapters/postgresql/schema_dumper.rb +50 -0
- data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +470 -290
- data/lib/active_record/connection_adapters/postgresql/type_metadata.rb +36 -0
- data/lib/active_record/connection_adapters/postgresql/utils.rb +12 -8
- data/lib/active_record/connection_adapters/postgresql_adapter.rb +551 -356
- data/lib/active_record/connection_adapters/schema_cache.rb +72 -25
- data/lib/active_record/connection_adapters/sql_type_metadata.rb +37 -0
- data/lib/active_record/connection_adapters/sqlite3/database_statements.rb +118 -0
- data/lib/active_record/connection_adapters/sqlite3/explain_pretty_printer.rb +21 -0
- data/lib/active_record/connection_adapters/sqlite3/quoting.rb +103 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_creation.rb +17 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_definitions.rb +19 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_dumper.rb +18 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_statements.rb +137 -0
- data/lib/active_record/connection_adapters/sqlite3_adapter.rb +290 -345
- data/lib/active_record/connection_adapters/statement_pool.rb +34 -13
- data/lib/active_record/connection_handling.rb +176 -41
- data/lib/active_record/core.rb +251 -231
- data/lib/active_record/counter_cache.rb +67 -49
- data/lib/active_record/database_configurations.rb +233 -0
- data/lib/active_record/database_configurations/database_config.rb +37 -0
- data/lib/active_record/database_configurations/hash_config.rb +50 -0
- data/lib/active_record/database_configurations/url_config.rb +79 -0
- data/lib/active_record/define_callbacks.rb +22 -0
- data/lib/active_record/dynamic_matchers.rb +87 -105
- data/lib/active_record/enum.rb +163 -86
- data/lib/active_record/errors.rb +188 -53
- data/lib/active_record/explain.rb +23 -11
- data/lib/active_record/explain_registry.rb +4 -2
- data/lib/active_record/explain_subscriber.rb +10 -5
- data/lib/active_record/fixture_set/file.rb +35 -9
- data/lib/active_record/fixture_set/model_metadata.rb +33 -0
- data/lib/active_record/fixture_set/render_context.rb +17 -0
- data/lib/active_record/fixture_set/table_row.rb +153 -0
- data/lib/active_record/fixture_set/table_rows.rb +47 -0
- data/lib/active_record/fixtures.rb +228 -499
- data/lib/active_record/gem_version.rb +6 -4
- data/lib/active_record/inheritance.rb +158 -112
- data/lib/active_record/insert_all.rb +179 -0
- data/lib/active_record/integration.rb +123 -29
- data/lib/active_record/internal_metadata.rb +53 -0
- data/lib/active_record/legacy_yaml_adapter.rb +21 -3
- data/lib/active_record/locale/en.yml +3 -2
- data/lib/active_record/locking/optimistic.rb +87 -96
- data/lib/active_record/locking/pessimistic.rb +18 -6
- data/lib/active_record/log_subscriber.rb +76 -33
- data/lib/active_record/middleware/database_selector.rb +75 -0
- data/lib/active_record/middleware/database_selector/resolver.rb +92 -0
- data/lib/active_record/middleware/database_selector/resolver/session.rb +45 -0
- data/lib/active_record/migration.rb +621 -303
- data/lib/active_record/migration/command_recorder.rb +177 -90
- data/lib/active_record/migration/compatibility.rb +244 -0
- data/lib/active_record/migration/join_table.rb +8 -6
- data/lib/active_record/model_schema.rb +312 -112
- data/lib/active_record/nested_attributes.rb +264 -222
- data/lib/active_record/no_touching.rb +14 -1
- data/lib/active_record/null_relation.rb +24 -37
- data/lib/active_record/persistence.rb +557 -125
- data/lib/active_record/query_cache.rb +19 -23
- data/lib/active_record/querying.rb +43 -29
- data/lib/active_record/railtie.rb +143 -44
- data/lib/active_record/railties/collection_cache_association_loading.rb +34 -0
- data/lib/active_record/railties/console_sandbox.rb +2 -0
- data/lib/active_record/railties/controller_runtime.rb +34 -33
- data/lib/active_record/railties/databases.rake +328 -185
- data/lib/active_record/readonly_attributes.rb +5 -4
- data/lib/active_record/reflection.rb +428 -279
- data/lib/active_record/relation.rb +518 -341
- data/lib/active_record/relation/batches.rb +207 -55
- data/lib/active_record/relation/batches/batch_enumerator.rb +69 -0
- data/lib/active_record/relation/calculations.rb +267 -253
- data/lib/active_record/relation/delegation.rb +70 -80
- data/lib/active_record/relation/finder_methods.rb +277 -241
- data/lib/active_record/relation/from_clause.rb +26 -0
- data/lib/active_record/relation/merger.rb +78 -87
- data/lib/active_record/relation/predicate_builder.rb +114 -119
- data/lib/active_record/relation/predicate_builder/array_handler.rb +27 -26
- data/lib/active_record/relation/predicate_builder/association_query_value.rb +43 -0
- data/lib/active_record/relation/predicate_builder/base_handler.rb +18 -0
- data/lib/active_record/relation/predicate_builder/basic_object_handler.rb +19 -0
- data/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb +53 -0
- data/lib/active_record/relation/predicate_builder/range_handler.rb +22 -0
- data/lib/active_record/relation/predicate_builder/relation_handler.rb +7 -1
- data/lib/active_record/relation/query_attribute.rb +50 -0
- data/lib/active_record/relation/query_methods.rb +575 -394
- data/lib/active_record/relation/record_fetch_warning.rb +51 -0
- data/lib/active_record/relation/spawn_methods.rb +11 -13
- data/lib/active_record/relation/where_clause.rb +190 -0
- data/lib/active_record/relation/where_clause_factory.rb +33 -0
- data/lib/active_record/result.rb +79 -42
- data/lib/active_record/runtime_registry.rb +6 -4
- data/lib/active_record/sanitization.rb +144 -121
- data/lib/active_record/schema.rb +21 -24
- data/lib/active_record/schema_dumper.rb +112 -93
- data/lib/active_record/schema_migration.rb +24 -17
- data/lib/active_record/scoping.rb +45 -26
- data/lib/active_record/scoping/default.rb +101 -85
- data/lib/active_record/scoping/named.rb +86 -33
- data/lib/active_record/secure_token.rb +40 -0
- data/lib/active_record/serialization.rb +5 -5
- data/lib/active_record/statement_cache.rb +73 -36
- data/lib/active_record/store.rb +127 -42
- data/lib/active_record/suppressor.rb +61 -0
- data/lib/active_record/table_metadata.rb +75 -0
- data/lib/active_record/tasks/database_tasks.rb +307 -100
- data/lib/active_record/tasks/mysql_database_tasks.rb +55 -99
- data/lib/active_record/tasks/postgresql_database_tasks.rb +81 -41
- data/lib/active_record/tasks/sqlite_database_tasks.rb +38 -16
- data/lib/active_record/test_databases.rb +23 -0
- data/lib/active_record/test_fixtures.rb +224 -0
- data/lib/active_record/timestamp.rb +86 -40
- data/lib/active_record/touch_later.rb +66 -0
- data/lib/active_record/transactions.rb +216 -150
- data/lib/active_record/translation.rb +3 -1
- data/lib/active_record/type.rb +78 -23
- data/lib/active_record/type/adapter_specific_registry.rb +129 -0
- data/lib/active_record/type/date.rb +4 -45
- data/lib/active_record/type/date_time.rb +4 -49
- data/lib/active_record/type/decimal_without_scale.rb +6 -2
- data/lib/active_record/type/hash_lookup_type_map.rb +5 -3
- data/lib/active_record/type/internal/timezone.rb +17 -0
- data/lib/active_record/type/json.rb +30 -0
- data/lib/active_record/type/serialized.rb +24 -15
- data/lib/active_record/type/text.rb +2 -2
- data/lib/active_record/type/time.rb +11 -16
- data/lib/active_record/type/type_map.rb +15 -17
- data/lib/active_record/type/unsigned_integer.rb +9 -7
- data/lib/active_record/type_caster.rb +9 -0
- data/lib/active_record/type_caster/connection.rb +34 -0
- data/lib/active_record/type_caster/map.rb +20 -0
- data/lib/active_record/validations.rb +39 -35
- data/lib/active_record/validations/absence.rb +25 -0
- data/lib/active_record/validations/associated.rb +13 -4
- data/lib/active_record/validations/length.rb +26 -0
- data/lib/active_record/validations/presence.rb +14 -13
- data/lib/active_record/validations/uniqueness.rb +42 -55
- data/lib/active_record/version.rb +3 -1
- data/lib/arel.rb +51 -0
- data/lib/arel/alias_predication.rb +9 -0
- data/lib/arel/attributes.rb +22 -0
- data/lib/arel/attributes/attribute.rb +37 -0
- data/lib/arel/collectors/bind.rb +24 -0
- data/lib/arel/collectors/composite.rb +31 -0
- data/lib/arel/collectors/plain_string.rb +20 -0
- data/lib/arel/collectors/sql_string.rb +20 -0
- data/lib/arel/collectors/substitute_binds.rb +28 -0
- data/lib/arel/crud.rb +42 -0
- data/lib/arel/delete_manager.rb +18 -0
- data/lib/arel/errors.rb +9 -0
- data/lib/arel/expressions.rb +29 -0
- data/lib/arel/factory_methods.rb +49 -0
- data/lib/arel/insert_manager.rb +49 -0
- data/lib/arel/math.rb +45 -0
- data/lib/arel/nodes.rb +68 -0
- data/lib/arel/nodes/and.rb +32 -0
- data/lib/arel/nodes/ascending.rb +23 -0
- data/lib/arel/nodes/binary.rb +52 -0
- data/lib/arel/nodes/bind_param.rb +36 -0
- data/lib/arel/nodes/case.rb +55 -0
- data/lib/arel/nodes/casted.rb +50 -0
- data/lib/arel/nodes/comment.rb +29 -0
- data/lib/arel/nodes/count.rb +12 -0
- data/lib/arel/nodes/delete_statement.rb +45 -0
- data/lib/arel/nodes/descending.rb +23 -0
- data/lib/arel/nodes/equality.rb +18 -0
- data/lib/arel/nodes/extract.rb +24 -0
- data/lib/arel/nodes/false.rb +16 -0
- data/lib/arel/nodes/full_outer_join.rb +8 -0
- data/lib/arel/nodes/function.rb +44 -0
- data/lib/arel/nodes/grouping.rb +8 -0
- data/lib/arel/nodes/in.rb +8 -0
- data/lib/arel/nodes/infix_operation.rb +80 -0
- data/lib/arel/nodes/inner_join.rb +8 -0
- data/lib/arel/nodes/insert_statement.rb +37 -0
- data/lib/arel/nodes/join_source.rb +20 -0
- data/lib/arel/nodes/matches.rb +18 -0
- data/lib/arel/nodes/named_function.rb +23 -0
- data/lib/arel/nodes/node.rb +50 -0
- data/lib/arel/nodes/node_expression.rb +13 -0
- data/lib/arel/nodes/outer_join.rb +8 -0
- data/lib/arel/nodes/over.rb +15 -0
- data/lib/arel/nodes/regexp.rb +16 -0
- data/lib/arel/nodes/right_outer_join.rb +8 -0
- data/lib/arel/nodes/select_core.rb +67 -0
- data/lib/arel/nodes/select_statement.rb +41 -0
- data/lib/arel/nodes/sql_literal.rb +16 -0
- data/lib/arel/nodes/string_join.rb +11 -0
- data/lib/arel/nodes/table_alias.rb +27 -0
- data/lib/arel/nodes/terminal.rb +16 -0
- data/lib/arel/nodes/true.rb +16 -0
- data/lib/arel/nodes/unary.rb +45 -0
- data/lib/arel/nodes/unary_operation.rb +20 -0
- data/lib/arel/nodes/unqualified_column.rb +22 -0
- data/lib/arel/nodes/update_statement.rb +41 -0
- data/lib/arel/nodes/values_list.rb +9 -0
- data/lib/arel/nodes/window.rb +126 -0
- data/lib/arel/nodes/with.rb +11 -0
- data/lib/arel/order_predications.rb +13 -0
- data/lib/arel/predications.rb +257 -0
- data/lib/arel/select_manager.rb +271 -0
- data/lib/arel/table.rb +110 -0
- data/lib/arel/tree_manager.rb +72 -0
- data/lib/arel/update_manager.rb +34 -0
- data/lib/arel/visitors.rb +20 -0
- data/lib/arel/visitors/depth_first.rb +204 -0
- data/lib/arel/visitors/dot.rb +297 -0
- data/lib/arel/visitors/ibm_db.rb +34 -0
- data/lib/arel/visitors/informix.rb +62 -0
- data/lib/arel/visitors/mssql.rb +157 -0
- data/lib/arel/visitors/mysql.rb +83 -0
- data/lib/arel/visitors/oracle.rb +159 -0
- data/lib/arel/visitors/oracle12.rb +66 -0
- data/lib/arel/visitors/postgresql.rb +110 -0
- data/lib/arel/visitors/sqlite.rb +39 -0
- data/lib/arel/visitors/to_sql.rb +889 -0
- data/lib/arel/visitors/visitor.rb +46 -0
- data/lib/arel/visitors/where_sql.rb +23 -0
- data/lib/arel/window_predications.rb +9 -0
- data/lib/rails/generators/active_record.rb +7 -5
- data/lib/rails/generators/active_record/application_record/application_record_generator.rb +27 -0
- data/lib/rails/generators/active_record/application_record/templates/application_record.rb.tt +5 -0
- data/lib/rails/generators/active_record/migration.rb +31 -1
- data/lib/rails/generators/active_record/migration/migration_generator.rb +42 -37
- data/lib/rails/generators/active_record/migration/templates/create_table_migration.rb.tt +24 -0
- data/lib/rails/generators/active_record/migration/templates/{migration.rb → migration.rb.tt} +11 -2
- data/lib/rails/generators/active_record/model/model_generator.rb +19 -22
- data/lib/rails/generators/active_record/model/templates/model.rb.tt +22 -0
- data/lib/rails/generators/active_record/model/templates/{module.rb → module.rb.tt} +0 -0
- metadata +164 -59
- data/lib/active_record/associations/preloader/belongs_to.rb +0 -17
- data/lib/active_record/associations/preloader/collection_association.rb +0 -24
- data/lib/active_record/associations/preloader/has_many.rb +0 -17
- data/lib/active_record/associations/preloader/has_many_through.rb +0 -19
- data/lib/active_record/associations/preloader/has_one.rb +0 -23
- data/lib/active_record/associations/preloader/has_one_through.rb +0 -9
- data/lib/active_record/associations/preloader/singular_association.rb +0 -21
- data/lib/active_record/attribute.rb +0 -163
- data/lib/active_record/attribute_set.rb +0 -81
- data/lib/active_record/attribute_set/builder.rb +0 -106
- data/lib/active_record/connection_adapters/mysql_adapter.rb +0 -498
- data/lib/active_record/connection_adapters/postgresql/array_parser.rb +0 -93
- data/lib/active_record/connection_adapters/postgresql/oid/float.rb +0 -21
- data/lib/active_record/connection_adapters/postgresql/oid/infinity.rb +0 -13
- data/lib/active_record/connection_adapters/postgresql/oid/json.rb +0 -35
- data/lib/active_record/connection_adapters/postgresql/oid/time.rb +0 -11
- data/lib/active_record/railties/jdbcmysql_error.rb +0 -16
- data/lib/active_record/serializers/xml_serializer.rb +0 -193
- data/lib/active_record/type/big_integer.rb +0 -13
- data/lib/active_record/type/binary.rb +0 -50
- data/lib/active_record/type/boolean.rb +0 -31
- data/lib/active_record/type/decimal.rb +0 -64
- data/lib/active_record/type/decorator.rb +0 -14
- data/lib/active_record/type/float.rb +0 -19
- data/lib/active_record/type/integer.rb +0 -59
- data/lib/active_record/type/mutable.rb +0 -16
- data/lib/active_record/type/numeric.rb +0 -36
- data/lib/active_record/type/string.rb +0 -40
- data/lib/active_record/type/time_value.rb +0 -38
- data/lib/active_record/type/value.rb +0 -110
- data/lib/rails/generators/active_record/migration/templates/create_table_migration.rb +0 -19
- data/lib/rails/generators/active_record/model/templates/model.rb +0 -10
@@ -1,10 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ActiveRecord
|
2
4
|
# = Active Record Autosave Association
|
3
5
|
#
|
4
|
-
#
|
6
|
+
# AutosaveAssociation is a module that takes care of automatically saving
|
5
7
|
# associated records when their parent is saved. In addition to saving, it
|
6
8
|
# also destroys any associated records that were marked for destruction.
|
7
|
-
# (See
|
9
|
+
# (See #mark_for_destruction and #marked_for_destruction?).
|
8
10
|
#
|
9
11
|
# Saving of the parent, its associations, and the destruction of marked
|
10
12
|
# associations, all happen inside a transaction. This should never leave the
|
@@ -22,7 +24,7 @@ module ActiveRecord
|
|
22
24
|
#
|
23
25
|
# == Validation
|
24
26
|
#
|
25
|
-
#
|
27
|
+
# Child records are validated unless <tt>:validate</tt> is +false+.
|
26
28
|
#
|
27
29
|
# == Callbacks
|
28
30
|
#
|
@@ -125,7 +127,6 @@ module ActiveRecord
|
|
125
127
|
# Now it _is_ removed from the database:
|
126
128
|
#
|
127
129
|
# Comment.find_by(id: id).nil? # => true
|
128
|
-
|
129
130
|
module AutosaveAssociation
|
130
131
|
extend ActiveSupport::Concern
|
131
132
|
|
@@ -141,22 +142,23 @@ module ActiveRecord
|
|
141
142
|
|
142
143
|
included do
|
143
144
|
Associations::Builder::Association.extensions << AssociationBuilderExtension
|
145
|
+
mattr_accessor :index_nested_attribute_errors, instance_writer: false, default: false
|
144
146
|
end
|
145
147
|
|
146
|
-
module ClassMethods
|
148
|
+
module ClassMethods # :nodoc:
|
147
149
|
private
|
148
150
|
|
149
151
|
def define_non_cyclic_method(name, &block)
|
150
|
-
return if
|
152
|
+
return if instance_methods(false).include?(name)
|
151
153
|
define_method(name) do |*args|
|
152
154
|
result = true; @_already_called ||= {}
|
153
155
|
# Loop prevention for validation of associations
|
154
156
|
unless @_already_called[name]
|
155
157
|
begin
|
156
|
-
@_already_called[name]=true
|
158
|
+
@_already_called[name] = true
|
157
159
|
result = instance_eval(&block)
|
158
160
|
ensure
|
159
|
-
@_already_called[name]=false
|
161
|
+
@_already_called[name] = false
|
160
162
|
end
|
161
163
|
end
|
162
164
|
|
@@ -180,6 +182,7 @@ module ActiveRecord
|
|
180
182
|
|
181
183
|
if reflection.collection?
|
182
184
|
before_save :before_save_collection_association
|
185
|
+
after_save :after_save_collection_association
|
183
186
|
|
184
187
|
define_non_cyclic_method(save_method) { save_collection_association(reflection) }
|
185
188
|
# Doesn't use after_save as that would save associations added in after_create/after_update twice
|
@@ -198,7 +201,7 @@ module ActiveRecord
|
|
198
201
|
after_create save_method
|
199
202
|
after_update save_method
|
200
203
|
else
|
201
|
-
define_non_cyclic_method(save_method) { save_belongs_to_association(reflection) }
|
204
|
+
define_non_cyclic_method(save_method) { throw(:abort) if save_belongs_to_association(reflection) == false }
|
202
205
|
before_save save_method
|
203
206
|
end
|
204
207
|
|
@@ -216,6 +219,7 @@ module ActiveRecord
|
|
216
219
|
|
217
220
|
define_non_cyclic_method(validation_method) { send(method, reflection) }
|
218
221
|
validate validation_method
|
222
|
+
after_validation :_ensure_no_duplicate_errors
|
219
223
|
end
|
220
224
|
end
|
221
225
|
end
|
@@ -227,7 +231,7 @@ module ActiveRecord
|
|
227
231
|
super
|
228
232
|
end
|
229
233
|
|
230
|
-
# Marks this record to be destroyed as part of the
|
234
|
+
# Marks this record to be destroyed as part of the parent's save transaction.
|
231
235
|
# This does _not_ actually destroy the record instantly, rather child record will be destroyed
|
232
236
|
# when <tt>parent.save</tt> is called.
|
233
237
|
#
|
@@ -236,7 +240,7 @@ module ActiveRecord
|
|
236
240
|
@marked_for_destruction = true
|
237
241
|
end
|
238
242
|
|
239
|
-
# Returns whether or not this record will be destroyed as part of the
|
243
|
+
# Returns whether or not this record will be destroyed as part of the parent's save transaction.
|
240
244
|
#
|
241
245
|
# Only useful if the <tt>:autosave</tt> option on the parent is enabled for this associated model.
|
242
246
|
def marked_for_destruction?
|
@@ -259,7 +263,7 @@ module ActiveRecord
|
|
259
263
|
# Returns whether or not this record has been changed in any way (including whether
|
260
264
|
# any of its nested autosave associations are likewise changed)
|
261
265
|
def changed_for_autosave?
|
262
|
-
new_record? ||
|
266
|
+
new_record? || has_changes_to_save? || marked_for_destruction? || nested_records_changed_for_autosave?
|
263
267
|
end
|
264
268
|
|
265
269
|
private
|
@@ -271,9 +275,9 @@ module ActiveRecord
|
|
271
275
|
if new_record
|
272
276
|
association && association.target
|
273
277
|
elsif autosave
|
274
|
-
association.target.find_all
|
278
|
+
association.target.find_all(&:changed_for_autosave?)
|
275
279
|
else
|
276
|
-
association.target.find_all
|
280
|
+
association.target.find_all(&:new_record?)
|
277
281
|
end
|
278
282
|
end
|
279
283
|
|
@@ -300,7 +304,7 @@ module ActiveRecord
|
|
300
304
|
def validate_single_association(reflection)
|
301
305
|
association = association_instance_get(reflection.name)
|
302
306
|
record = association && association.reader
|
303
|
-
association_valid?(reflection, record) if record
|
307
|
+
association_valid?(reflection, record) if record && record.changed_for_autosave?
|
304
308
|
end
|
305
309
|
|
306
310
|
# Validate the associated records if <tt>:validate</tt> or
|
@@ -309,7 +313,7 @@ module ActiveRecord
|
|
309
313
|
def validate_collection_association(reflection)
|
310
314
|
if association = association_instance_get(reflection.name)
|
311
315
|
if records = associated_records_to_validate_or_save(association, new_record?, reflection.options[:autosave])
|
312
|
-
records.
|
316
|
+
records.each_with_index { |record, index| association_valid?(reflection, record, index) }
|
313
317
|
end
|
314
318
|
end
|
315
319
|
end
|
@@ -317,17 +321,30 @@ module ActiveRecord
|
|
317
321
|
# Returns whether or not the association is valid and applies any errors to
|
318
322
|
# the parent, <tt>self</tt>, if it wasn't. Skips any <tt>:autosave</tt>
|
319
323
|
# enabled records if they're marked_for_destruction? or destroyed.
|
320
|
-
def association_valid?(reflection, record)
|
324
|
+
def association_valid?(reflection, record, index = nil)
|
321
325
|
return true if record.destroyed? || (reflection.options[:autosave] && record.marked_for_destruction?)
|
322
326
|
|
323
|
-
|
324
|
-
|
327
|
+
context = validation_context unless [:create, :update].include?(validation_context)
|
328
|
+
|
329
|
+
unless valid = record.valid?(context)
|
325
330
|
if reflection.options[:autosave]
|
331
|
+
indexed_attribute = !index.nil? && (reflection.options[:index_errors] || ActiveRecord::Base.index_nested_attribute_errors)
|
332
|
+
|
326
333
|
record.errors.each do |attribute, message|
|
327
|
-
attribute =
|
334
|
+
attribute = normalize_reflection_attribute(indexed_attribute, reflection, index, attribute)
|
328
335
|
errors[attribute] << message
|
329
336
|
errors[attribute].uniq!
|
330
337
|
end
|
338
|
+
|
339
|
+
record.errors.details.each_key do |attribute|
|
340
|
+
reflection_attribute =
|
341
|
+
normalize_reflection_attribute(indexed_attribute, reflection, index, attribute).to_sym
|
342
|
+
|
343
|
+
record.errors.details[attribute].each do |error|
|
344
|
+
errors.details[reflection_attribute] << error
|
345
|
+
errors.details[reflection_attribute].uniq!
|
346
|
+
end
|
347
|
+
end
|
331
348
|
else
|
332
349
|
errors.add(reflection.name)
|
333
350
|
end
|
@@ -335,18 +352,29 @@ module ActiveRecord
|
|
335
352
|
valid
|
336
353
|
end
|
337
354
|
|
355
|
+
def normalize_reflection_attribute(indexed_attribute, reflection, index, attribute)
|
356
|
+
if indexed_attribute
|
357
|
+
"#{reflection.name}[#{index}].#{attribute}"
|
358
|
+
else
|
359
|
+
"#{reflection.name}.#{attribute}"
|
360
|
+
end
|
361
|
+
end
|
362
|
+
|
338
363
|
# Is used as a before_save callback to check while saving a collection
|
339
364
|
# association whether or not the parent was a new record before saving.
|
340
365
|
def before_save_collection_association
|
341
366
|
@new_record_before_save = new_record?
|
342
|
-
|
367
|
+
end
|
368
|
+
|
369
|
+
def after_save_collection_association
|
370
|
+
@new_record_before_save = false
|
343
371
|
end
|
344
372
|
|
345
373
|
# Saves any new associated records, or all loaded autosave associations if
|
346
374
|
# <tt>:autosave</tt> is enabled on the association.
|
347
375
|
#
|
348
376
|
# In addition, it destroys all children that were marked for destruction
|
349
|
-
# with mark_for_destruction.
|
377
|
+
# with #mark_for_destruction.
|
350
378
|
#
|
351
379
|
# This all happens inside a transaction, _if_ the Transactions module is included into
|
352
380
|
# ActiveRecord::Base after the AutosaveAssociation module, which it does by default.
|
@@ -354,7 +382,14 @@ module ActiveRecord
|
|
354
382
|
if association = association_instance_get(reflection.name)
|
355
383
|
autosave = reflection.options[:autosave]
|
356
384
|
|
357
|
-
|
385
|
+
# By saving the instance variable in a local variable,
|
386
|
+
# we make the whole callback re-entrant.
|
387
|
+
new_record_before_save = @new_record_before_save
|
388
|
+
|
389
|
+
# reconstruct the scope now that we know the owner's id
|
390
|
+
association.reset_scope
|
391
|
+
|
392
|
+
if records = associated_records_to_validate_or_save(association, new_record_before_save, autosave)
|
358
393
|
if autosave
|
359
394
|
records_to_destroy = records.select(&:marked_for_destruction?)
|
360
395
|
records_to_destroy.each { |record| association.destroy(record) }
|
@@ -366,22 +401,24 @@ module ActiveRecord
|
|
366
401
|
|
367
402
|
saved = true
|
368
403
|
|
369
|
-
if autosave != false && (
|
404
|
+
if autosave != false && (new_record_before_save || record.new_record?)
|
370
405
|
if autosave
|
371
406
|
saved = association.insert_record(record, false)
|
372
|
-
|
373
|
-
association.insert_record(record)
|
407
|
+
elsif !reflection.nested?
|
408
|
+
association_saved = association.insert_record(record)
|
409
|
+
|
410
|
+
if reflection.validate?
|
411
|
+
errors.add(reflection.name) unless association_saved
|
412
|
+
saved = association_saved
|
413
|
+
end
|
374
414
|
end
|
375
415
|
elsif autosave
|
376
|
-
saved = record.save(:
|
416
|
+
saved = record.save(validate: false)
|
377
417
|
end
|
378
418
|
|
379
|
-
raise
|
419
|
+
raise(RecordInvalid.new(association.owner)) unless saved
|
380
420
|
end
|
381
421
|
end
|
382
|
-
|
383
|
-
# reconstruct the scope now that we know the owner's id
|
384
|
-
association.reset_scope if association.respond_to?(:reset_scope)
|
385
422
|
end
|
386
423
|
end
|
387
424
|
|
@@ -389,7 +426,7 @@ module ActiveRecord
|
|
389
426
|
# on the association.
|
390
427
|
#
|
391
428
|
# In addition, it will destroy the association if it was marked for
|
392
|
-
# destruction with mark_for_destruction.
|
429
|
+
# destruction with #mark_for_destruction.
|
393
430
|
#
|
394
431
|
# This all happens inside a transaction, _if_ the Transactions module is included into
|
395
432
|
# ActiveRecord::Base after the AutosaveAssociation module, which it does by default.
|
@@ -408,9 +445,12 @@ module ActiveRecord
|
|
408
445
|
if (autosave && record.changed_for_autosave?) || new_record? || record_changed?(reflection, record, key)
|
409
446
|
unless reflection.through_reflection
|
410
447
|
record[reflection.foreign_key] = key
|
448
|
+
if inverse_reflection = reflection.inverse_of
|
449
|
+
record.association(inverse_reflection.name).loaded!
|
450
|
+
end
|
411
451
|
end
|
412
452
|
|
413
|
-
saved = record.save(:
|
453
|
+
saved = record.save(validate: !autosave)
|
414
454
|
raise ActiveRecord::Rollback if !saved && autosave
|
415
455
|
saved
|
416
456
|
end
|
@@ -421,8 +461,14 @@ module ActiveRecord
|
|
421
461
|
# If the record is new or it has changed, returns true.
|
422
462
|
def record_changed?(reflection, record, key)
|
423
463
|
record.new_record? ||
|
424
|
-
|
425
|
-
record.
|
464
|
+
association_foreign_key_changed?(reflection, record, key) ||
|
465
|
+
record.will_save_change_to_attribute?(reflection.foreign_key)
|
466
|
+
end
|
467
|
+
|
468
|
+
def association_foreign_key_changed?(reflection, record, key)
|
469
|
+
return false if reflection.through_reflection?
|
470
|
+
|
471
|
+
record.has_attribute?(reflection.foreign_key) && record[reflection.foreign_key] != key
|
426
472
|
end
|
427
473
|
|
428
474
|
# Saves the associated record if it's new or <tt>:autosave</tt> is enabled.
|
@@ -430,7 +476,9 @@ module ActiveRecord
|
|
430
476
|
# In addition, it will destroy the association if it was marked for destruction.
|
431
477
|
def save_belongs_to_association(reflection)
|
432
478
|
association = association_instance_get(reflection.name)
|
433
|
-
|
479
|
+
return unless association && association.loaded? && !association.stale_target?
|
480
|
+
|
481
|
+
record = association.load_target
|
434
482
|
if record && !record.destroyed?
|
435
483
|
autosave = reflection.options[:autosave]
|
436
484
|
|
@@ -438,7 +486,7 @@ module ActiveRecord
|
|
438
486
|
self[reflection.foreign_key] = nil
|
439
487
|
record.destroy
|
440
488
|
elsif autosave != false
|
441
|
-
saved = record.save(:
|
489
|
+
saved = record.save(validate: !autosave) if record.new_record? || (autosave && record.changed_for_autosave?)
|
442
490
|
|
443
491
|
if association.updated?
|
444
492
|
association_id = record.send(reflection.options[:primary_key] || :id)
|
@@ -450,5 +498,11 @@ module ActiveRecord
|
|
450
498
|
end
|
451
499
|
end
|
452
500
|
end
|
501
|
+
|
502
|
+
def _ensure_no_duplicate_errors
|
503
|
+
errors.messages.each_key do |attribute|
|
504
|
+
errors[attribute].uniq!
|
505
|
+
end
|
506
|
+
end
|
453
507
|
end
|
454
508
|
end
|
data/lib/active_record/base.rb
CHANGED
@@ -1,27 +1,28 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
12
|
-
require
|
13
|
-
require
|
14
|
-
require
|
15
|
-
require
|
16
|
-
require
|
17
|
-
require
|
18
|
-
require
|
19
|
-
require
|
20
|
-
require
|
21
|
-
require
|
22
|
-
require
|
23
|
-
require
|
24
|
-
require
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "yaml"
|
4
|
+
require "active_support/benchmarkable"
|
5
|
+
require "active_support/dependencies"
|
6
|
+
require "active_support/descendants_tracker"
|
7
|
+
require "active_support/time"
|
8
|
+
require "active_support/core_ext/module/attribute_accessors"
|
9
|
+
require "active_support/core_ext/array/extract_options"
|
10
|
+
require "active_support/core_ext/hash/deep_merge"
|
11
|
+
require "active_support/core_ext/hash/slice"
|
12
|
+
require "active_support/core_ext/string/behavior"
|
13
|
+
require "active_support/core_ext/kernel/singleton_class"
|
14
|
+
require "active_support/core_ext/module/introspection"
|
15
|
+
require "active_support/core_ext/object/duplicable"
|
16
|
+
require "active_support/core_ext/class/subclasses"
|
17
|
+
require "active_record/attribute_decorators"
|
18
|
+
require "active_record/define_callbacks"
|
19
|
+
require "active_record/errors"
|
20
|
+
require "active_record/log_subscriber"
|
21
|
+
require "active_record/explain_subscriber"
|
22
|
+
require "active_record/relation/delegation"
|
23
|
+
require "active_record/attributes"
|
24
|
+
require "active_record/type_caster"
|
25
|
+
require "active_record/database_configurations"
|
25
26
|
|
26
27
|
module ActiveRecord #:nodoc:
|
27
28
|
# = Active Record
|
@@ -133,14 +134,11 @@ module ActiveRecord #:nodoc:
|
|
133
134
|
# end
|
134
135
|
# end
|
135
136
|
#
|
136
|
-
# You can alternatively use <tt>self[:attribute]=(value)</tt> and <tt>self[:attribute]</tt>
|
137
|
-
# or <tt>write_attribute(:attribute, value)</tt> and <tt>read_attribute(:attribute)</tt>.
|
138
|
-
#
|
139
137
|
# == Attribute query methods
|
140
138
|
#
|
141
139
|
# In addition to the basic accessors, query methods are also automatically available on the Active Record object.
|
142
140
|
# Query methods allow you to test whether an attribute value is present.
|
143
|
-
#
|
141
|
+
# Additionally, when dealing with numeric values, a query method will return false if the value is zero.
|
144
142
|
#
|
145
143
|
# For example, an Active Record User with the <tt>name</tt> attribute has a <tt>name?</tt> method that you can call
|
146
144
|
# to determine whether the user has a name:
|
@@ -171,10 +169,11 @@ module ActiveRecord #:nodoc:
|
|
171
169
|
# <tt>Person.find_by_user_name(user_name)</tt>.
|
172
170
|
#
|
173
171
|
# It's possible to add an exclamation point (!) on the end of the dynamic finders to get them to raise an
|
174
|
-
#
|
172
|
+
# ActiveRecord::RecordNotFound error if they do not return any records,
|
175
173
|
# like <tt>Person.find_by_last_name!</tt>.
|
176
174
|
#
|
177
|
-
# It's also possible to use multiple attributes in the same
|
175
|
+
# It's also possible to use multiple attributes in the same <tt>find_by_</tt> by separating them with
|
176
|
+
# "_and_".
|
178
177
|
#
|
179
178
|
# Person.find_by(user_name: user_name, password: password)
|
180
179
|
# Person.find_by_user_name_and_password(user_name, password) # with dynamic finder
|
@@ -186,7 +185,8 @@ module ActiveRecord #:nodoc:
|
|
186
185
|
# == Saving arrays, hashes, and other non-mappable objects in text columns
|
187
186
|
#
|
188
187
|
# Active Record can serialize any object in text columns using YAML. To do so, you must
|
189
|
-
# specify this with a call to the class method
|
188
|
+
# specify this with a call to the class method
|
189
|
+
# {serialize}[rdoc-ref:AttributeMethods::Serialization::ClassMethods#serialize].
|
190
190
|
# This makes it possible to store arrays, hashes, and other non-mappable objects without doing
|
191
191
|
# any additional work.
|
192
192
|
#
|
@@ -226,39 +226,47 @@ module ActiveRecord #:nodoc:
|
|
226
226
|
#
|
227
227
|
# == Connection to multiple databases in different models
|
228
228
|
#
|
229
|
-
# Connections are usually created through
|
229
|
+
# Connections are usually created through
|
230
|
+
# {ActiveRecord::Base.establish_connection}[rdoc-ref:ConnectionHandling#establish_connection] and retrieved
|
230
231
|
# by ActiveRecord::Base.connection. All classes inheriting from ActiveRecord::Base will use this
|
231
232
|
# connection. But you can also set a class-specific connection. For example, if Course is an
|
232
233
|
# ActiveRecord::Base, but resides in a different database, you can just say <tt>Course.establish_connection</tt>
|
233
234
|
# and Course and all of its subclasses will use this connection instead.
|
234
235
|
#
|
235
236
|
# This feature is implemented by keeping a connection pool in ActiveRecord::Base that is
|
236
|
-
# a
|
237
|
+
# a hash indexed by the class. If a connection is requested, the
|
238
|
+
# {ActiveRecord::Base.retrieve_connection}[rdoc-ref:ConnectionHandling#retrieve_connection] method
|
237
239
|
# will go up the class-hierarchy until a connection is found in the connection pool.
|
238
240
|
#
|
239
241
|
# == Exceptions
|
240
242
|
#
|
241
243
|
# * ActiveRecordError - Generic error class and superclass of all other errors raised by Active Record.
|
242
|
-
# * AdapterNotSpecified - The configuration hash used in
|
243
|
-
#
|
244
|
-
#
|
245
|
-
#
|
244
|
+
# * AdapterNotSpecified - The configuration hash used in
|
245
|
+
# {ActiveRecord::Base.establish_connection}[rdoc-ref:ConnectionHandling#establish_connection]
|
246
|
+
# didn't include an <tt>:adapter</tt> key.
|
247
|
+
# * AdapterNotFound - The <tt>:adapter</tt> key used in
|
248
|
+
# {ActiveRecord::Base.establish_connection}[rdoc-ref:ConnectionHandling#establish_connection]
|
249
|
+
# specified a non-existent adapter
|
246
250
|
# (or a bad spelling of an existing one).
|
247
251
|
# * AssociationTypeMismatch - The object assigned to the association wasn't of the type
|
248
252
|
# specified in the association definition.
|
249
253
|
# * AttributeAssignmentError - An error occurred while doing a mass assignment through the
|
250
|
-
#
|
254
|
+
# {ActiveRecord::Base#attributes=}[rdoc-ref:AttributeAssignment#attributes=] method.
|
251
255
|
# You can inspect the +attribute+ property of the exception object to determine which attribute
|
252
256
|
# triggered the error.
|
253
|
-
# * ConnectionNotEstablished - No connection has been established.
|
254
|
-
# before querying.
|
257
|
+
# * ConnectionNotEstablished - No connection has been established.
|
258
|
+
# Use {ActiveRecord::Base.establish_connection}[rdoc-ref:ConnectionHandling#establish_connection] before querying.
|
255
259
|
# * MultiparameterAssignmentErrors - Collection of errors that occurred during a mass assignment using the
|
256
|
-
#
|
260
|
+
# {ActiveRecord::Base#attributes=}[rdoc-ref:AttributeAssignment#attributes=] method.
|
261
|
+
# The +errors+ property of this exception contains an array of
|
257
262
|
# AttributeAssignmentError
|
258
263
|
# objects that should be inspected to determine which attributes triggered the errors.
|
259
|
-
# * RecordInvalid - raised by save! and
|
260
|
-
#
|
261
|
-
#
|
264
|
+
# * RecordInvalid - raised by {ActiveRecord::Base#save!}[rdoc-ref:Persistence#save!] and
|
265
|
+
# {ActiveRecord::Base.create!}[rdoc-ref:Persistence::ClassMethods#create!]
|
266
|
+
# when the record is invalid.
|
267
|
+
# * RecordNotFound - No record responded to the {ActiveRecord::Base.find}[rdoc-ref:FinderMethods#find] method.
|
268
|
+
# Either the row with the given ID doesn't exist or the row didn't meet the additional restrictions.
|
269
|
+
# Some {ActiveRecord::Base.find}[rdoc-ref:FinderMethods#find] calls do not raise this exception to signal
|
262
270
|
# nothing was found, please check its documentation for further details.
|
263
271
|
# * SerializationTypeMismatch - The serialized object wasn't of the class specified as the second parameter.
|
264
272
|
# * StatementInvalid - The database server rejected the SQL statement. The precise error is added in the message.
|
@@ -280,6 +288,7 @@ module ActiveRecord #:nodoc:
|
|
280
288
|
extend Explain
|
281
289
|
extend Enum
|
282
290
|
extend Delegation::DelegateCache
|
291
|
+
extend Aggregations::ClassMethods
|
283
292
|
|
284
293
|
include Core
|
285
294
|
include Persistence
|
@@ -297,6 +306,7 @@ module ActiveRecord #:nodoc:
|
|
297
306
|
include AttributeDecorators
|
298
307
|
include Locking::Optimistic
|
299
308
|
include Locking::Pessimistic
|
309
|
+
include DefineCallbacks
|
300
310
|
include AttributeMethods
|
301
311
|
include Callbacks
|
302
312
|
include Timestamp
|
@@ -304,12 +314,14 @@ module ActiveRecord #:nodoc:
|
|
304
314
|
include ActiveModel::SecurePassword
|
305
315
|
include AutosaveAssociation
|
306
316
|
include NestedAttributes
|
307
|
-
include Aggregations
|
308
317
|
include Transactions
|
318
|
+
include TouchLater
|
309
319
|
include NoTouching
|
310
320
|
include Reflection
|
311
321
|
include Serialization
|
312
322
|
include Store
|
323
|
+
include SecureToken
|
324
|
+
include Suppressor
|
313
325
|
end
|
314
326
|
|
315
327
|
ActiveSupport.run_load_hooks(:active_record, Base)
|