我目前克隆單層關聯像這樣:ActiveRecord:如何克隆嵌套關聯?
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
但是,做一些奇怪的東西與實際取代了原來的答案,然後創建新的,所以ID的停止正確匹配。
我的天哪。我愛你。 – Shpigford
克隆方法已更改爲dup。看到[回購自述](https://github.com/moiristo/deep_cloneable) –
現在它變成:new_survey = original_survey.deep_clone:include => [:questions =>:答案] – halbano