Fixed a bug in  when using has_many association with :inverse_of option and UUID primary key.
DirtyModel uses a hash to keep track of any changes made to attributes
of an instance. When using the attribute_will_change! method, you must
supply a string and not a symbol or the *_changed? method will break
(because it is looking for the attribute name as a string in the keys
of the underlying hash). To remedy this, I simply made the underlying
hash a HashWithIndifferentAccess so it won't matter if you supply
the attribute name as a symbol or string to attribute_will_change!.
make sure both headers are set before checking for ip spoofing
Adding documentation to +polymorphic_url+
concerning the options that it inherits from +url_for+. The way that
+polymorhpic_url+ is built allows it to have options
like +:anchor+, +:script_name+, etc. but this is currently not
documented.
Raising an error when nil or non-hash is passed to update_attributes.
Fix typo.
Migration dump UUID default functions to schema.rb. Fixes #10751.
Disable ability to iterate over a Range of TimeWithZone
let the sqlite task run without rails
Creating options for schema dumper.

These options make it easier to change the config from
ActiveRecord::Base to use something else inside of the SchemaDumper.
Rewrite journey routes formatter for performance
Small refactoring changes to generators.

Made a method name clearer (added a bang to the end to show that it
mutates arguments) and extracted indentation into its own method.
Fix spacing issue
4.0 Release notes should point to 4.0 Changelog
Be assertive about adding `[ci skip]` message
`attibutes` => `attributes`
`implemention` => `implementation`
Pull the RelationMutationTests from cases/relation_test to cases/relation/mutation_test.
Deprecate the delegation of Array bang methods in ActiveRecord::Delegation

The primary means of returning results for Array bang methods is to modify
the array in-place. When you call these methods on a relation, that
array is created, modified, and then thrown away. Only the secondary
return value is exposed to the caller.

Removing this delegation is a straight-forward way to reduce user error
by forcing callers to first explicitly call #to_a in order to expose
the array to be acted on by the bang method.
Example of Join models

In the example of join models, there are five models but in the explanation only consider Category, Post, Comment and Guest.