Question

J'ai construit un Auditlog Rail 3 à l'aide de quelques plugins, qui stockent les données dans une table Auditlog avec les champs suivants pour l'identification (FeedEd_id, FeedEd_Type)

Donc, dans mon cas, j'ai un photoalbum qui a des photos.

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

Lorsque je supprime un photoalbum (id = 2), cela fonctionne très bien pour supprimer toutes les photos associées, mais elle ne supprime pas les éléments de l'auditlog qui sont comme ceci: (feedded_id = 2, feedded_type = photoalbum)

Étant donné que la table Auditlog n'a pas de colonne "Photo_Album_ID", et ne peut pas, existe-t-il un moyen de configurer un destory dépendant avec des rails pour supprimer tous les éléments associés dans Auditlog lorsqu'un photoalbum est supprimé?

Merci, je sais que celui-ci est un peu plus compliqué que la plupart. Merci de l'avoir lu!

Était-ce utile?

La solution

Je pense que ce que vous recherchez, c'est la combinaison de

belongs_to :feeded, :polymorphic => true

dans votre classe de journal d'audit et

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

dans votre classe photoalbum.

Si vous n'avez pas de classe pour représenter votre journal d'audit, vous devriez pouvoir ajouter le belongs_to à la classe existante (dans vos plugins peut-être?).

Je ne suis pas sûr à 100% de l'option: As =>: Falée, vous devrez nommer correctement ce symbole et je ne sais pas à quoi vous attendra ActiveRecord, mais le belongs_to La relation recherchera feedded_id et feedded_type, donc lorsque l'objet «parent» est un photoalbum, il se joindra correctement photo_album.id = audit_logs.feeded_id AND audit_logs.feeded_type = 'PhotoAlbum'. Étant donné que cela ne nécessite aucune modification de votre base de données, tout votre code existant doit continuer à fonctionner.

Vous pouvez lire sur le Options d'associations ici.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top