Save has_one associations only if record has changes

Prevents save related callbacks such as `after_commit` being
triggered when `has_one` objects are already persisted and have no
changes.
Only use BINARY for mysql case sensitive uniqueness check when column has a case insensitive collation.
typos fixes
Tweak Configuring Guide language

the fact that Rails is multi-thread by default is not very relevant. see https://github.com/rails/rails/pull/13998 [ci skip]
:scissors:

This commit also addresses rails/docrails#169 and rails/rails#14159
Avoid namespacing routes inside engines

Since #11544, invoking the controller generator, any generated route is
namespaced according to the class_path method. Since a mountable plugin
is namespaced, creating a controller inside would generate a namespaced
route based on the engine's name.

The controller generator now relies on regular_class_path which does not
contain the class hierarchy but the given path.

Fixes #14079.
Improve guide for Hash#transform_keys and related methods.

[skip ci]
Fix code alignment in duplicable? guide.

[skip ci]
[ci skip] use secrets.yml instead of secret_token.rb in the action controller guide
`includes` uses SQL parsing when String joins are involved.

This is a partial revert of 22b3481ba2aa55fad1f9a5db94072312b345fb55.
The current implementation of `references_eager_loaded_tables?` needs to know
every table involved in the query. With the current API this is not possible
without SQL parsing.

While a2dab46cae35a06fd5c5500037177492a047c252 deprecated SQL parsing for `includes`.
It did not issue deprecation warnings when String joins are involved. This resulted
in a breaking change after the deprecated behavior was removed (22b3481ba2aa55fad1f9a5db94072312b345fb55).

We will need to rethink the usage of `includes`, `preload` and `eager_load` but for now,
this brings back the old *working* behavior.
Merge pull request #14231 from brianstorti/bs-docs-secret-token

Use secrets.yml instead of secret_token.rb in the docs
Merge pull request #14226 from senny/14109_partial_revert

`includes` uses SQL parsing when String joins are involved.
Improve a bit the 4.1 release notes [ci skip]

Fix a few typos. #present_in has been changed to #presence_in through
commit d61baee5.
[ci skip] correct select examples and doc, ref [522c0fd]
Merge pull request #14230 from kuldeepaggarwal/doc-select

Correct `select` examples and doc, ref [522c0fd] [ci skip]
Improve collision explanation for Hash#transform_keys.

Based on comments at
https://github.com/rails/docrails/commit/42417b0013819e573be9ffc5402e179003156e8e#commitcomment-5527251

[skip ci]
set the error callback to a nice default in case nobody set an error callback and an error happens
[ci skip] use secrets.secret_key_base instead of config.secret_key_base
use secrets.yml instead of secret_token.rb
Merge pull request #14233 from kuldeepaggarwal/fix-secrets-doc

use `secrets.secret_key_base` instead of `config.secret_key_base`
Remove unnecessary db call when replacing.

When replacing a has_many association with the same one, there is no
need to do a round-trip to the db to create/and drop a new transaction.

[fixes #14220]