2012-09-09 4 views
0

J'ai un modèle simple avec un filtre after_create qui crée des enregistrements d'association.Ignorer la création de version de paper_trail lors de la création d'enregistrements enfants

class Subject 
    after_create :create_topics! 

    has_paper_trail :on => [:create, :update], 
        :ignore => [:topics] 

    private 

    def create_topics! 
    self.account.default_topics_for_subject_type(self.subject_type).each do |topic| 
     self.topics.create!({:name => topic.name}) 
    end 
    end 
end 

Cependant, la création d'un Subject maintenant qui va créer deux par exemple sujets résultats en deux versions pour le même sujet, un create avant et un après update les sujets ont changé.

Des idées pour résoudre ce problème?

mise à jour
Le modèle de sujet n'est pas une sous-classe de sujet, mais qui lui appartient. Ils ont aussi un paper_trail et doivent être versionnés dès le début du processus de création par sujet.

class Topic 
    belongs_to :subject 
end 
+0

est sujet une sous-classe de sujet? Si tel est le cas, Topic héritera du rappel et sera déclenché par self.topics.create – RadBrad

+0

Le sujet est un modèle distinct et non une sous-classe. – pduersteler

+0

Question mise à jour, se sentir comme si je n'avais pas tout fourni. – pduersteler

Répondre

1
private 

def create_topics! 
    account.default_topics_for_subject_type(subject_type).each_with_index do |topic, index| 
    if index == 0 
     create_topic!(topic) 
    else 
     without_versioning { create_topic!(topic) } 
    end 
    end 
end 

def create_topic!(topic) 
    self.topics.create!({:name => topic.name}) 
end 
+0

Est-ce que cela fonctionne lorsque je veux que les sujets soient eux-mêmes versionnés depuis le début (en ayant l'événement de création lors de la création du sujet)? – pduersteler

+0

Je ne pense pas. Sinon, j'ai lu que si vous créez le sujet et que vous réglez manuellement la touche étrangère sur le sujet, cela ne déclenchera pas de papertrail pour le sujet. Clair? – apneadiving

+0

Les deux ne fonctionneront pas comme prévu. Chose amusante: quand je déclare le public 'create_topics!' Et l'appelle sur le sujet, je n'obtiens pas de nouvelles versions (à cause du tableau ': skip'). C'est vraiment le callback créé. Je n'ai aucun autre callback after_save ou after_create qui pourrait interférer. – pduersteler

Questions connexes