В настоящее время я клонирую одноуровневую ассоциацию:
class Survey < ActiveRecord::Base
def duplicate
new_template = self.clone
new_template.questions << self.questions.collect { |question| question.clone }
new_template.save
end
end
Таким образом, чтобы клонировать Survey
, затем клонирует Questions
, связанный с этим опросом. Хорошо. Это работает очень хорошо.
Но у меня возникают проблемы с тем, что каждый вопрос has_many
Answers
. Итак Survey has_many Questions which has_many Answers
.
Я не могу понять, как правильно клонировать ответы. Я пробовал это:
def duplicate
new_template = self.clone
self.questions.each do |question|
new_question = question.clone
new_question.save
question.answers.each do |answer|
new_answer = answer.clone
new_answer.save
new_question.answers << answer
end
new_template.questions << question
end
new_template.save
end
Но это делает некоторые странные вещи, фактически заменяя исходные ответы, а затем создавая новые, так что идентификатор останавливается правильно.