Carlos Brando

Nome do Jogo

O Rails tá lento? Reveja seu código...

1339929731_4087ea7a65

Tenho um relacionamento muitos-para-um, e gostaria que ao excluir o objeto pai todos os seus relacionamentos (filhos) fossem também apagados no banco de dados. Esta exclusão automática existe e se chama exclusão em cascata. No Rails é muito simples implementar:

[source:ruby] class Pai < ActiveRecord::Base has_many :filhos, :dependent => true end [/source]

Esta declaração informa que o Filho não pode existir sem um Pai. Desta maneira, se eu apagar uma instância de Pai, todos os seus filhos também serão apagados. Mas, atenção, cada filho será apagado individualmente, será executado um DELETE para cada linha no banco de dados.

Mas se seus objetos Filhos forem exclusivos de um objeto Pai - e somente de um - então você pode trocar esta declaração por esta:

[source:ruby] class Pai < ActiveRecord::Base has_many :filhos, :exclusively_dependent => true end [/source]

Agora o Rails fará o mesmo, mas de uma vez, com apenas um comando SQL.

Fiquem atentos aos recursos do Rails, os maiores problemas de desempenho que encontro é em detalhes como esse.

Comments