2010-11-01 12 views
6

He creado un AuditLog Rail 3 con la ayuda de algunos complementos, que almacenan datos en una tabla AuditLog con los siguientes campos para identificación (feeded_id, feeded_type)Cómo destruir un registro con has_many,: dependent =>: destroy

Así que en mi caso, tengo un álbum de fotos que tiene_muy fotos.

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

cuando se borra un álbum de fotos (id = 2) esto funciona muy bien para eliminar todas las fotografías asociadas, pero no eliminan los elementos de de AuditLog que son así: (feeded_id = 2, feeded_type = ÁlbumDigital)

Dado que la tabla AuditLog no tiene una columna "photo_album_id", y no puede, ¿hay alguna manera de configurar un dependiente> Destory con Rails para eliminar todos los elementos asociados en AuditLog cuando se elimina PhotoAlbum? ?

Gracias, sé que este es un poco más complicado que la mayoría. ¡Gracias por leerlo!

Respuesta

4

Creo que lo que busca es la combinación de

belongs_to :feeded, :polymorphic => true

en su clase de registro de auditoría y

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

en su clase ÁlbumDigital.

Si no tiene una clase para representar su registro de auditoría, debería poder agregar el belongs_to a la clase existente (¿quizás en sus complementos?).

No estoy 100% seguro de la opción: as =>: feeded, tendrá que nombrar ese símbolo correctamente y no estoy seguro de lo que ActiveRecord esperará, pero la relación belongs_to buscará feeded_id y feeded_type, entonces cuando el objeto 'padre' es un álbum de fotos, se unirá correctamente en photo_album.id = audit_logs.feeded_id AND audit_logs.feeded_type = 'PhotoAlbum'. Como esto no requiere ningún cambio en su base de datos, todo su código existente debería seguir funcionando.

Puede leer en el options for associations here.

Cuestiones relacionadas