Frage

Ich habe mit Hilfe einiger Plugins einen Rail 3 -Auditlog erstellt, der Daten in einer Auditlog -Tabelle mit den folgenden Feldern zur Identifizierung speichert (feeded_id, feated_type)

In meinem Fall habe ich also ein Fotoalbum, das _many Fotos hat.

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

Wenn ich ein Photoalbum lösche (ID = 2), funktioniert dies sehr gut, um alle zugehörigen Fotos zu löschen, aber es löscht keine Elemente aus dem Auditlog, die wie folgt sind: (feeded_id = 2, feated_type = photoalbum)

Angesichts der Tatsache, dass die Auditlog -Tabelle keine Spalte "photo_album_id" enthält und nicht, gibt es eine Möglichkeit, ein abhängiges> Destory mit Schienen einzustellen, um alle zugehörigen Elemente in Teh -Auditlog zu löschen, wenn ein Photoalbum gelöscht wird?

Danke, ich weiß, dass dies ein bisschen komplizierter ist als die meisten anderen. Danke, dass du es gelesen hast!

War es hilfreich?

Lösung

Ich denke, was Sie suchen, ist die Kombination von

belongs_to :feeded, :polymorphic => true

in Ihrer Prüfungsprotokollklasse und

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

in Ihrer Photoalbum -Klasse.

Wenn Sie keine Klasse haben, die Ihr Audit -Protokoll darstellt, sollten Sie das hinzufügen können belongs_to an die vorhandene Klasse (vielleicht in Ihren Plugins?).

Ich bin mir nicht zu 100% sicher über die Option: AS =>: Feeded, Sie müssen dieses Symbol richtig nennen und ich bin nicht sicher, was Activerecord erwarten wird, aber die belongs_to Die Beziehung sucht nach feeded_id und feated_type. Wenn das Objekt "Eltern" ein Photoalbum ist photo_album.id = audit_logs.feeded_id AND audit_logs.feeded_type = 'PhotoAlbum'. Da dies keine Änderungen an Ihrer Datenbank erfordert, sollte der gesamte vorhandene Code weiter funktionieren.

Sie können sich über die nachlesen Optionen für Assoziationen hier.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top