TL;DR has_many
is an anti-pattern which leads straight to monolithic applications.
First - what defines a monolithic application? It is one that cannot be split apart because everything depends on everything else. No part can be extracted to an external library - the library would have to be the size of our entire app. Let this be our working definition of a monolith. Ignore, for the moment, whether it's deployed on more than one machine, but ask could it be separated if you desired.
One major culprit of not being able to split an application up is a dependency cycle.