Rails: Plugin :dependent => :protect
El método has_many de Rails tiene una opción llamada :dependent que permite especificar como la operación de borrado afecta a los registros asociados a través de la relación has_many. La opción :dependent puede tomar varios valores: :destroy, :delete, :nullify y false (o nil). Pero ningún valores permite especificar que el registro no debe ser destruido si todavía tiene registros asociados.
El plugin :dependent => :protect añade un nuevo valor a la opción :dependent llamado :protect que previene que un registro sea destruido si aún tienen registros asociados. Si se intenta destruir un registro con un registro asociado se disparará la excepción Active Record :: ReferentialIntegrityProtectionError con información sobre el registro y la asociación que la provocaron.
El valor :protect intenta imitar a la orden ON DELETE RESTRICT de SQL olvidada por el equipo de desarrollo de Rails.
La última versión del plugin ha sido comprobada en Rails 2.1.0, 2.0.2 y 1.2.6. Anteriores versiones del plugin funcionaron en Rails 1.1, pero no se si ese hecho se mantiene en las nuevas versiones.
El código de este plugin está basado en la idea y el código del patch de Diego Algorta (diego.algorta@gmail.com) en el ticket #3837 de Ruby on Rails.
Este plugin no habría sido posible sin la ayuda de The Complete Guide to Rails Plugins - Part I y Part II y parte del código de pruebas del plugin acts_as_state_machine de Scott Barron.
Instalación
Se puede descargar el plugin desde:
- Última versión de desarrollo:
http://svn.ruido-blanco.net/dependent_protect/trunk/ - Última versión estable:
http://svn.ruido-blanco.net/dependent_protect/tags/dependent_protect-20080608
Se puede utilizar script/plugin install url para realizar la instalación en tu proyecto de Rails.
La documentación formal del plugin puede ser encontrada en Dependent Protect documentation (aunque no hay mucho que ver allí).
Autor
Daniel Rodríguez Troitiño <drodrigueztroitino@yahoo.es> (basandose en las ideas y el código de Diego Algorta <diego.algorta@gmail.com>).
Licencia
Este trabajo está licenciado bajo la Licencia MIT.

