创建子记录时跳过paper_trail的版本创建

时间:2012-09-09 22:38:37

标签: ruby-on-rails ruby-on-rails-3 paper-trail-gem

我有一个带有after_create过滤器的简单模型,用于创建关联记录。

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例如会创建两个主题会产生同一主题的两个版本,一个create之前和update主题发生变化后。

关于如何解决这个问题的任何想法?

更新
主题模型不是主题的子类,但属于它。他们还有一个paper_trail,应该从创建过程开始直到主题版本。

class Topic
  belongs_to :subject
end

1 个答案:

答案 0 :(得分: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