相关疑难解决方法(0)

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
Run Code Online (Sandbox Code Playgroud)

因此克隆那个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
Run Code Online (Sandbox Code Playgroud)

但实际上替换原始答案然后创建新答案会产生一些奇怪的东西,因此ID会正确地停止匹配.

activerecord clone ruby-on-rails associations ruby-on-rails-3

25
推荐指数
1
解决办法
2万
查看次数