Plugin that adds foreign key constraints to associations. Currently supports only PostgreSQL and MySQL

All constraints are added to the underlying database, but constraining is implemented in pure ruby.


- :protect     returns false on destroy if there are child records
- :destroy     deletes children if present
- :destroy!    deletes children directly without instantiating the resource, bypassing any hooks
               Does not support 1:1 Relationships as #destroy! is not supported on Resource in dm-master
- :set_nil     sets parent id to nil in child associations
               Not valid for M:M relationships as duplicate records could be created (see explanation in specs)
- :skip        Does nothing with children, results in orphaned records

By default a relationship will PROTECT its children.

Cardinality Notes

* 1:1
 * Applicable constraints: [:set_nil, :skip, :protect, :destroy]

* 1:M
 * Applicable constraints: [:set_nil, :skip, :protect, :destroy, :destroy!]

* M:M
 * Applicable constraints: [:skip, :protect, :destroy, :destroy!]


# 1:M Example class Farmer

has n, :pigs #equivalent to: has n, :pigs, :constraint => :protect


# M:M Example class Articles

has n, :tags, :through => Resource, :constraint => :destroy


class Tags

has n, :articles, :through => Resource, :constraint => :destroy


# Intermediary constraints for relationships using :through => Resource # are automatically inherited from the M:M relationship.

# 1:1 Example class Farmer

has 1, :beloved_sheep, :constraint => :protect