Encapsulate each validation error as an Error object

ActiveModel::Error class has changed from Hash based interface to an array of Error objects.

Rails support bulk insert/upsert on relation

Rails 6.1 has added support for bulk insert/upsert on relation to preserve scope values.

Rails ActionController::Parameters each_pair and each_value returns an enumerator.

Rails ActionController::Parameters each_pair and each_value now returns an enumerator when provided without a block.

Rails 6.1 adds support for signed ids to Active Record

Rails 6.1 added support for signed ids which are a tamper-proof way of identifying a bearer

Rails 6 adds ActiveJob::TestCase#perform_enqueued_jobs without a block

With Rails 6, we can use ActiveJob::TestCase#perform_enqueued_jobs without a block to perform jobs in tests

Rails 6.1 adds rescue_from to ActionCable::Connection::Base

The `rescue_from` on ActionCable::Connection::Base allows us to intercept unhandled exceptions

Rails adds support for annotating HTML output with template file names.

Rails 6.1 has added support for adding HTML comments to the rendered output indicating where each template begins and ends.

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.

Ways for reducing Heroku slug size

Techniques for reducing Heroku slug size for Rails applications