【发布时间】:2011-09-16 17:18:39
【问题描述】:
我想对包含所有属性的对象进行深度复制。
experiment_old 有 10 次试验。我想通过 10 次试验将所有内容复制到experiment_new。 Experiment_old 还应保留 10 次试用信息。
但是,我在下面尝试的所有案例,它们都很好地复制了所有内容,但是experiment_old 没有 10 次试验信息。他们只是出现在 Experiment_new 上。
对这些情况进行深度复制的最佳方法是什么。
案例一:
@experiment_new = Experiment.create(@experiment_old.attributes.merge(:trials => experiment_old.trails))
案例2:
@experiment_new = Marshal.load(Marshal.dump(@experiment_old.trials))
案例3:
@experiment_new = @experiment_old.clone
这是模型:
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
【问题讨论】:
-
试验属于_试验,对吧?您可以发布对象的模型吗?
-
每当我遇到作为对象模型核心的深度克隆时,我建议使用 NoSQL DB,例如 MongoDB w/Mongoid