Pregunta

He construido un Rail 3 AuditLog con la ayuda de algunos complementos, que almacenan datos en una tabla AuditLog con los siguientes campos para la identificación (Feeded_ID, Feeded_Type)

Entonces, en mi caso, tengo un fotoalbum que tiene fotos.

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

Cuando elimino un fotoalbum (id = 2) esto funciona muy bien para eliminar todas las fotos asociadas, pero no elimina los elementos del AuditLog que son así: (Feeded_id = 2, Feeded_Type = Photoalbum)

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 el Auditlog cuando se elimina un fotoalbum?

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

¿Fue útil?

Solución

Creo que lo que estás buscando 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 tu clase fotográfica.

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: AS =>: Opción alimentada, tendrá que nombrar ese símbolo correctamente y no estoy seguro de qué esperará Activerecord, pero el belongs_to La relación buscará Feeded_id y Feeded_Type, por lo que cuando el objeto 'padre' es un fotoalbum, se unirá correctamente en photo_album.id = audit_logs.feeded_id AND audit_logs.feeded_type = 'PhotoAlbum'. Dado que esto no requiere ningún cambio en su base de datos, todo su código existente debería seguir funcionando.

Puedes leer en el Opciones para asociaciones aquí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top