Pergunta

Eu construí um Trilho 3 auditlog groom com a ajuda de alguns plugins, que armazenam dados em um auditlog groom Tabela com os seguintes campos para identificação (feeded_id, feeded_type)

Então no meu caso, eu tenho um photoalbum que has_many fotos.

class PhotoAlbum < ActiveRecord::Base
has_many :photos, :dependent => :destroy

quando eu excluir um photoalbum (id=2) isto funciona muito bem para eliminar todos os associados de fotos, mas não excluir itens da caixa de auditlog groom, que são como este:(feeded_id = 2, feeded_type = PhotoAlbum)

Dado que o auditlog groom tabela não tem um "photo_album_id" coluna e não pode, existe um caminho para a instalação de um dependente > Destory com Trilhos para excluir todos os itens associados na área do auditlog groom quando um PhotoAlbum é excluído?

Obrigado, eu sei que isso é um pouco mais complicada do que a maioria.Obrigado por ler!

Foi útil?

Solução

Eu acho que o que você está procurando é a combinação de

belongs_to :feeded, :polymorphic => true

em seu log de Auditoria de classe e

has_many :logs, :as => :feeded, :dependent => :destroy

em seu PhotoAlbum classe.

Se você não tem uma classe para representar o seu log de auditoria, você deve ser capaz de adicionar o belongs_to para a classe existente (em seus plugins, talvez?).

Eu não tenho 100% de certeza sobre :as => :alimentadas opção, você terá que nome símbolo corretamente e não tenho a certeza que o ActiveRecord vai esperar, mas o belongs_to relacionamento vai olhar para feeded_id e feeded_type, então, quando o 'pai' objeto é um PhotoAlbum ele irá juntar-se corretamente em photo_album.id = audit_logs.feeded_id AND audit_logs.feeded_type = 'PhotoAlbum'.Uma vez que este não requer quaisquer alterações ao seu banco de dados, todo o código existente deve continuar a trabalhar.

Você pode ler sobre o opções para associações aqui.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top