estoy actualmente la clonación de una asociación de un solo nivel de esta manera:ActiveRecord: ¿Cómo puedo clonar las asociaciones anidadas?
class Survey < ActiveRecord::Base
def duplicate
new_template = self.clone
new_template.questions << self.questions.collect { |question| question.clone }
new_template.save
end
end
Así que los clones del Survey
luego clona el Questions
asociado con esa encuesta. Multa. Eso funciona bastante bien.
Pero lo que estoy teniendo problemas es que cada pregunta has_many
Answers
. Entonces Survey has_many Questions which has_many Answers
.
No sé cómo clonar las respuestas correctamente. He intentado esto:
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
pero eso algunas cosas raras con realidad la sustitución de las respuestas originales a continuación, crear otros nuevos, así que deja de Identificación correspondan correctamente.
Dios mío. te quiero. – Shpigford
el método de clonación ha cambiado a dup. ver [el readme del repositorio] (https://github.com/moiristo/deep_cloneable) –
Y ahora cambia a: new_survey = original_survey.deep_clone: include => [: questions =>: answers] – halbano