Rails 6.1 supports `if_not_exists` option for adding index

Rails 6.1 added support for if_not_exists option to add_index. The if_not_exists provided to create_table also gets propagated to all indexes getting created in the create_table block.

Using Interactors in Rails

Interactors provide a common interface for performing complex user interactions.

Rails adds support for descending order in find_each, find_in_batches and in_batches

Rails 6.1 has added support for providing order(ASC/DESC) to batch processing methods like find_each, find_in_batches and in_batches instead of processing records in ascending order always.

Rails adds support for db:rollback:name for multiple database applications

Rails has added support for name option while rollbacking migration for multiple database application

Rails 6.1 add Enumerable#pick to complement Relation#pick

Adding pick to enumerable will enable us to call pick on loaded relations, unloaded relations, and plain enumerables interchangeably.

Using Optimizer Hints in Rails

Optimizer Hints allows us to control the query optimizer of a database system. Rails 6 has added support to provide Optimizer Hints.

Rails ActiveRecord::Relation#pick now uses already loaded results

Rails ActiveRecord::Relation#pick now uses already loaded results instead of making a new query everytime.

Rails [attribute_name]_previously_changed? accepts :from and :to arguments

Rails Active Model Dirty method [attribute_name]_previously_changed? now accepts :from and :to arguments just like [attribute_name]_changed?

Rails - Allows to specify schema cache path in database configuration file

Rails now exposes a new configuration for specifying the location of the schema cache file. This can be done in database.yml using schema_cache_path key.

Eager loading Active Storage models to avoid N+1 issues

Removing N+1 queries when we access the Active Storage attachments associated with an ActiveRecord model.