小编shc*_*hci的帖子

Ruby on Rails深度复制/深层克隆对象及其属性

我想对包括所有属性的对象进行深层复制.

experiment_old有10个试验.我希望通过10次试验将所有内容复制到experiment_new中.experiment_old还应该保留10个试用信息.

但是,我在下面尝试过的所有情况都会很好地复制一切,但是experiment_old没有10个试验信息.他们只是出现在experiment_new上.

对这些案例进行深层复制的最佳方法是什么.

情况1:

@experiment_new = Experiment.create(@experiment_old.attributes.merge(:trials => experiment_old.trails))
Run Code Online (Sandbox Code Playgroud)

案例2:

@experiment_new = Marshal.load(Marshal.dump(@experiment_old.trials))
Run Code Online (Sandbox Code Playgroud)

案例3:

@experiment_new = @experiment_old.clone
Run Code Online (Sandbox Code Playgroud)

这是模型:

class Experiment < ActiveRecord::Base
  belongs_to :experimenter
  has_many :trials
  has_many :participants
end


class Trial < ActiveRecord::Base
  belongs_to :experiment
  belongs_to :datum
  belongs_to :condition
  has_one :result_trial
end
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails deep-copy

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

标签 统计

deep-copy ×1

ruby-on-rails ×1