2010-11-01 18 views
6

Ho creato un AuditLog Rail 3 con l'aiuto di alcuni plugin, che memorizzano i dati in una tabella AuditLog con i seguenti campi per l'identificazione (feeded_id, feeded_type)Come distruggere un record con has_many,: dependent =>: destroy

Quindi nel mio caso, ho un album di foto che contiene molte foto.

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

quando elimino un album fotografico (id = 2) questo funziona molto bene per eliminare tutte le foto associate, ma non elimina gli elementi dalla AuditLog che sono come questa: (feeded_id = 2, feeded_type = PhotoAlbum)

Dato che la tabella AuditLog non ha una colonna "photo_album_id" e non può, c'è un modo per impostare una dipendenza> Destory with Rails per eliminare tutti gli elementi associati in AuditLog quando un PhotoAlbum viene eliminato ?

Grazie, so che questo è un po 'più complicato della maggior parte. Grazie per aver letto tutto!

risposta

4

Penso che quello che state cercando è la combinazione di

belongs_to :feeded, :polymorphic => true

nella vostra Audit classe di log e

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

nella classe PhotoAlbum.

Se non si dispone di una classe per rappresentare il registro di controllo, si dovrebbe essere in grado di aggiungere lo belongs_to alla classe esistente (nei propri plugin, forse?).

Non sono sicuro al 100% dell'opzione: as =>: feeded, dovrai denominare correttamente quel simbolo e non sono sicuro di cosa ActiveRecord si aspetta, ma la relazione belongs_to cercherà feeded_id e feeded_type, quindi, quando l'oggetto "genitore" è un PhotoAlbum, si unirà correttamente a 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.

È possibile leggere su options for associations here.

Problemi correlati