gpt4 book ai didi

ruby-on-rails - Ruby on Rails对象及其属性的深层复制/深层克隆

转载 作者:行者123 更新时间:2023-12-03 13:42:07 25 4
gpt4 key购买 nike

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

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))


情况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

最佳答案

您应该克隆每个试验,并将它们分配给克隆的试验:

@experiment_new = @experiment_old.clone
@experiment_old.trials.each do |trial|
@experiment_new.trials << trial.clone
end

关于ruby-on-rails - Ruby on Rails对象及其属性的深层复制/深层克隆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6378257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com