Создание всех дочерних элементов при создании данного модуля

#ruby-on-rails-3 #activerecord #callback

#ruby-on-rails-3 #activerecord #обратный вызов

Вопрос:

У меня есть приложение Rails 3 со следующей взаимосвязью между моделями:

 Course ---[ 1:n ]---> Module
  

И когда пользователь регистрируется в Course , у меня есть это:

 Enrollment ---[ 1:n ]---> ModuleStatus
  

У каждого Enrollment также всегда есть пользователь и курс

ВОПРОС: Как я могу обеспечить, чтобы при Enrollment создании для пользователя система продолжила и создала ModuleStatus для каждого из модулей, которые есть у данного Course модуля?

Должен ли я использовать обратный вызов для принудительного выполнения этого создания?

Если да, то какой обратный вызов здесь подходит? Было бы after_create ?

Спасибо!

Ответ №1:

Краткий ответ: да, использование after_create , безусловно, имеет смысл. Вероятно, это будет выглядеть примерно так (очевидно, вы можете заполнить детали вашего моделирования).

 class Enrollment
  belongs_to :user
  belongs_to :course
  has_many :module_statuses

  after_create :generate_module_statuses

  def generate_module_statuses
    self.course.modules.each do |module|
      self.module_statuses.create(:the_correct_attributes)
    end
  end

end