Cheap many to many
There are two common ways to establish a many-to-many relationship:
has_and_belongs_to_many
has_many, :through
Both require a join table, and the second requires a little more setup than the first bit is more future-proof.
A third alternative is so simple it sounds dumb: simply add a JSON column to the parent that contains an array of child IDs. If you understand the constraints of this approach and your use case doesn't need them, it can be a flexible and noncommittal way to model relationships.
Downsides
No guarantee of data integrity (can have orphaned IDs, no
dependent: destroy
, etc.).Cannot access list of parents from child (can't see who a model belongs to).
Worse performance (or, at least, unmanaged performance).
Advantages
Very noncommittal. When working with uncertainty, it's good to be as flexible as possible until you are sure of requirements. Creating a table is very committal.
Automatic transactions. Simply update the parent record without needing to worry about data inconsistency.
Can easily migrate to a true join-table based relationship.
Last updated