module Sequel::Plugins::AssociationDependencies

The association_dependencies plugin allows you do easily set up before and/or after destroy hooks for destroying, deleting, or nullifying associated model objects. The following association types support the following dependency actions:

:many_to_many

:nullify (removes all related entries in join table)

:many_to_one

:delete, :destroy

:one_to_many, one_to_one

:delete, :destroy, :nullify (sets foreign key to NULL for all associated objects)

This plugin works directly with the association datasets and does not use any cached association values. The :delete action will delete all associated objects from the database in a single SQL call. The :destroy action will load each associated object from the database and call the destroy method on it.

To set up an association dependency, you must provide a hash with association name symbols and dependency action values. You can provide the hash to the plugin call itself or to the add_association_dependencies method:

Business.plugin :association_dependencies, address: :delete
# or:
Artist.plugin :association_dependencies
Artist.add_association_dependencies albums: :destroy, reviews: :delete, tags: :nullify