Rails 7 adds support for `if_exists/if_not_exists` on `remove_foreign_key/add_foreign_key`Rails 7 adds support for `if_exists/if_not_exists` on `remove_foreign_key/add_foreign_key` in migrations to silently ignore raised exceptions.
Rails 7 MySQL adapter improves the security of untyped bound valuesMySQL adapter in Rails 7 casts numbers and booleans to string to avoid security vulnerabilities.
Rails 7 adds previously_persisted? method to ActiveRecordRails 7 adds previously_persisted? method to check an object previously existed in the database and presently deleted.
Rails 7 adds AudioAnalyzer to ActiveStorageRails 7 adds AudioAnalyzer to ActiveStorage to extract audio duration and bit_rate.
Rails 7 generators will raise errors if an attribute type is invalidRails 7 generators will validate the type by checking if it is of a default migration type and will raise an error if it is invalid.
Rails 7 allows passing raw SQL as `on_duplicate` value to `#upsert_all`Rails 7 allow passing raw SQL statements to `on_duplicate` and `returning` option as value to ActiveRecord `#upsert_all` method.
Rails 7 provides context when logging unpermitted parametersRails 7 enables passing context to ActionController::Parameters providing more information to the developer.
Rails 7 adds encryption to ActiveRecordRails 7 supports application-level encryption. We can declare which attributes should be encrypted and, ActiveRecord will encrypt and decrypt when necessary.
Rails 7 ensures has_one autosave association callbacks get called onceIn Rails 7, the autosave association callbacks for the has_one are non-cyclic.
Rails 7 allows access to nested encrypted secrets by method callsWe can now access nested secrets stored in credentials.yml.enc using the dot (.) syntax instead of using [ ]