Destroy e delete

Nel database uso sempre i constraints attraverso le foreign keys.
Ho un Settore uno a molti con Categoria.
Categoria e’ molti a molti con Fornitore.
Se cerco di cancellare un settore, attraverso il metodo :destroy, il
quale ha delle categorie che sono associate ad un fornitore mi viene
sollevata l’eccezione di violazione dei constraints, giustamente.
Ho provato ad aggiungere il contraint anche al modello, quindi ho
messo Sector has_many :categories, :dependent => :destroy.
A questo punto se cancello un settore mi vengono eliminate anche le
categorie associate a prescindere dal fatto che esista il contraint
nel database.
Se faccio Sector has_many :categories, :dependent => :delete_all e
tento di cancellare un Settore con delle Categorie associate mi viene
risollevata l’eccezione di violazione dei constraints.
Perche’ il destroy non tiene conto dei constraint?
Non ho ancora chiara la differenza tra destroy e delete.