0

アソシエーションレコードを作成する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

ただし、たとえば2つのトピックを作成するnowを作成すると、トピックが変更される前と後Subjectの同じ主題に対して2つのバージョンが作成されます。createupdate

これを解決する方法について何かアイデアはありますか?

更新
トピックモデルは主題からのサブクラスではありませんが、それに属しています。また、paper_trailもあり、作成プロセスの最初から件名までバージョン管理する必要があります。

class Topic
  belongs_to :subject
end
4

1 に答える 1

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
于 2012-09-09T22:54:51.283 に答える