Come distruggere un record con Has_Many ,: dipendente =>: distruggi
-
28-09-2019 - |
Domanda
Ho costruito un auditlog Rail 3 con l'aiuto di alcuni plugin, che archiviano i dati in una tabella di auditlog con i seguenti campi per l'identificazione (FeedEd_id, FeedEd_Type)
Quindi, nel mio caso, ho un fotoalbo che ha foto.
class PhotoAlbum < ActiveRecord::Base
has_many :photos, :dependent => :destroy
Quando elimino un fotoalbum (id = 2) funziona molto bene per eliminare tutte le foto associate, ma non elimina gli elementi dall'auditlog che sono così: (feed_id = 2, feed_type = photoalbum)
Dato che la tabella di auditlog non ha una colonna "photo_album_id" e non può, esiste un modo per impostare un destante dipendente con i binari per eliminare tutti gli articoli associati in Auditlog quando un fotoalbum viene eliminato?
Grazie, so che questo è un po 'più complicato della maggior parte. Grazie per averlo letto!
Soluzione
Penso che quello che stai cercando sia la combinazione di
belongs_to :feeded, :polymorphic => true
nella tua classe di registro di audit e
has_many :logs, :as => :feeded, :dependent => :destroy
Nella tua classe di fotoalbum.
Se non si dispone di una classe per rappresentare il tuo registro di audit, dovresti essere in grado di aggiungere il belongs_to
alla classe esistente (forse nei tuoi plugin?).
Non sono sicuro al 100% di: AS =>: opzione alimentata, dovrai nominare quel simbolo correttamente e non sono sicuro di cosa si aspetterà Activever belongs_to
La relazione cercherà FeedEd_id e FeedEd_Type, quindi quando l'oggetto "genitore" è un fotoalbum si unirà correttamente photo_album.id = audit_logs.feeded_id AND audit_logs.feeded_type = 'PhotoAlbum'
. Poiché ciò non richiede alcuna modifica al database, tutto il codice esistente dovrebbe continuare a funzionare.
Puoi leggere su Opzioni per le associazioni qui.