Rails: Plugin :dependent => :protect

Read this page in english

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:

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.

Tu servidor sin límites: 20GB de espacio, 1TB de transferencia, 1 dominio gratuito. Por 1.5€ al mes utilizando el código "RUIDOBLANCO" en DreamHost. Más información.