Rails after_initialize только на "новых"

У меня есть следующие 2 модели

class Sport < ActiveRecord::Base
  has_many :charts, order: "sortWeight ASC"
  has_one :product, :as => :productable
  accepts_nested_attributes_for :product, :allow_destroy => true
end

class Product < ActiveRecord::Base
  belongs_to :category
  belongs_to :productable, :polymorphic => true
end

Спорт не может существовать без продукта, поэтому в моем sports_controller.rb у меня было:

def new
  @sport = Sport.new
  @sport.product = Product.new
...
end

Я пытался переместить создание продукта в спортивную модель, используя after_initialize:

after_initialize :create_product

def create_product
 self.product = Product.new
end

Я быстро узнал, что after_initialize вызывается всякий раз, когда создается экземпляр модели (т.е. из find вызов). Так что это было не то поведение, которое я искал.

Как мне смоделировать требование о том, чтобы у всего спорта был продукт?

Спасибо

51
задан Tyler DeWitt 7 March 2012 в 11:42
поделиться