dependente => Destrua em uma associação "Has_Many Through"
-
22-09-2019 - |
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
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