Ruby中数组的深层副本

Sai*_*ner 14 ruby arrays clone copy ruby-on-rails

我想在生产中获得一个对象并做一个精确的副本(复制其内容)到另一个相同类型的对象.我尝试从ruby控制台以3种方式执行此操作,但没有一个工作:

  1. 假设tt您将要复制的第一个对象tt2作为副本对象.我尝试的第一种方法是克隆数组

    tt2.patients  = tt.urls.patients
    tt2.doctors   = tt.segments.doctors
    tt2.hospitals = tt.pixels.hospitals
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我尝试的第二种方法是复制数组,这实际上与克隆数组相同:

    tt2.patients  = tt.patients.dup
    tt2.doctors   = tt.doctors.dup
    tt2.hospitals = tt.hospitals.dup
    
    Run Code Online (Sandbox Code Playgroud)
  3. 我尝试的第三种方法是marhsalling.

    tt2.patients  = Marshal.load(Marshal.dump(tt.patients)) 
    tt2.doctors   = Marshal.load(Marshal.dump(tt.doctors)) 
    tt2.hospitals = Marshal.load(Marshal.dump(tt.hospitals)) 
    
    Run Code Online (Sandbox Code Playgroud)

以上都不适用于从一个阵列到另一个阵列的深度复制.在上面单独尝试每种方法后,第一个对象(tt)的所有内容都无效(患者,医生和医院都消失了).关于将一个对象的内容复制到另一个对象,您有什么其他想法吗?谢谢.

Tri*_*rip 19

简单!

@new_tt            = tt2.clone
@new_tt.patients   = tt2.patients.dup
@new_tt.doctors    = tt2.doctors.dup
@new_tt.hospitals  = tt2.hospitals.dup
@new_tt.save
Run Code Online (Sandbox Code Playgroud)


Bvu*_*Ic7 6

这就是ActiveRecord :: Base#clone方法的用途:

@bar = @ foo.clone

@ bar.save