2011-12-22 2 views
11

Volevo ottenere un oggetto in produzione e fare una replica esatta (copiarne il contenuto) su un altro oggetto dello stesso tipo. Ho provato a fare questo in 3 modi da console rubino, che nessuno di loro ha funzionato:Copia profonda di array in Ruby

  1. Diciamo che avete la tt come il primo oggetto che si desidera copiare e tt2 come l'oggetto di replica. Il primo approccio ho provato è la clonazione matrice

    tt2.patients = tt.urls.patients 
    tt2.doctors = tt.segments.doctors 
    tt2.hospitals = tt.pixels.hospitals 
    
  2. Secondo approccio ho provato è duplicare la matrice, che è in realtà lo stesso clonazione dell'array:

    tt2.patients = tt.patients.dup 
    tt2.doctors = tt.doctors.dup 
    tt2.hospitals = tt.hospitals.dup 
    
  3. terzo approccio ho provato è 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)) 
    

Nessuna delle opere di cui sopra per la copia in profondità da un array ad un altro. Dopo aver provato ciascun approccio singolarmente sopra, tutti i contenuti del primo oggetto (tt) sono annullati (pazienti, medici e ospedali sono andati). Avete altre idee su come copiare il contenuto di un oggetto su un altro? Grazie.

+1

Si sta semplicemente impostando le variabili nel primo esempio. Prova invece tt2.patients = tt.patiens.clone. – three

risposta

15

facile!

@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 
+0

Funziona alla grande. new_tt ha tutte le informazioni di cui ho bisogno ora. Tuttavia, tutti i contenuti di tt2 (pazienti, medici, ospedali) sono andati dopo aver fatto quello che mi hai detto sopra. Come mantieni il contenuto di tt2? –

+0

Woops! Ho avuto un errore sintattico lì. Ho aggiornato il codice sopra. Provalo. – Trip

+0

Cosa c'è di diverso tra questo e qual è il suo secondo approccio? –

Problemi correlati