2012-09-09 53 views
0

我有一個簡單的模型,它具有創建關聯記錄的after_create過濾器。在創建子記錄時跳過創建paper_trail的版本

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 

但是,創建一個Subject現在這e.g將創建兩個版本的同一主題,一個create之前和update的主題已經改變後兩個議題的結果。

關於如何解決這個問題的任何想法?

更新
的主題模型是不是從主題的子類,而是屬於它。他們也有一個paper_trail,並應該從創建過程開始直到主題。

class Topic 
    belongs_to :subject 
end 
+0

是主題主題的一個子類?如果這樣Topic將繼承回調,並且它會被self.topics.create觸發 – RadBrad

+0

Topic是一個單獨的模型,而不是一個子類。 – pduersteler

+0

更新的問題,感覺像我沒有提供的一切。 – pduersteler

回答

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

當我想讓主題本身從開始版本開始(創建主題時創建它們的事件)時,這是否工作? – pduersteler

+0

我不這麼認爲。否則,我讀到,如果您創建主題並手動設置主題的外鍵,則不會觸發主題的曲目。明確? – apneadiving

+0

兩者都無法按預期方式工作。有趣的事情是:當我聲明'create_topics!'public並將其稱爲主題時,我沒有獲得新版本(因爲':skip'數組)。這實際上只是創建回調。我沒有任何其他after_save或after_create回調可能會干擾這一點。 – pduersteler