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.
* 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
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