Pergunta

Aparentemente dependente => Destroy é ignorado ao usar também a opção: através da opção.

Então eu tenho isso ...

class Comment < ActiveRecord::Base
  has_many :comment_users, :dependent => :destroy
  has_many :users, :through => :comment_users
  ...
end

... mas excluir um comentário não resulta na exclusão dos registros de comentários associados.

Qual é a abordagem recomendada, então, para a Cascade delete ao usar: através?

Obrigado

Foi útil?

Solução

Aparentemente: dependente não é ignorado!

A verdadeira questão era que eu estava ligando Comment.delete(id) que vai direto para o banco de dados, enquanto agora eu uso Comment.destroy(id) que carrega o objeto de comentário e chama Destro () nele. Isso pega o :dependent => :destroy E tudo está bem.

Outras dicas

A solução do pôster original é válida, no entanto, eu queria ressaltar que isso só funciona se você tiver uma coluna de identificação para essa tabela. Prefiro que minhas tabelas muitos a muitos sejam apenas as duas chaves estrangeiras, mas tive que remover meu "id: false" da definição da tabela de migração para excluir em cascata para funcionar. Ter essa funcionalidade definitivamente supera não ter uma coluna de identificação na tabela.

Se você tem uma associação polimórfica, deve fazer o que o @blogofsongs disse, mas com um atributo estrangeiro como assim:

class User < ActiveRecord::Base
  has_many :activities , dependent: :destroy, foreign_key: :trackable_id
end
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top