2011-12-22 18 views
11

में सरणी की गहरी प्रतिलिपि मैं उत्पादन पर एक वस्तु प्राप्त करना चाहता था और एक सटीक प्रतिकृति (इसकी सामग्री पर प्रतिलिपि) एक ही प्रकार की दूसरी वस्तु पर करना चाहता था।रूबी

  1. मान लीजिए कि आप पहली वस्तु आप प्रतिकृति वस्तु के रूप में पदभार और tt2 प्रतिलिपि बनाना चाहते हैं के रूप में tt करते हैं: मैं रूबी कंसोल से 3 तरीकों से उनमें से कोई भी काम में ऐसा करने की कोशिश की।

    tt2.patients = tt.patients.dup 
    tt2.doctors = tt.doctors.dup 
    tt2.hospitals = tt.hospitals.dup 
    
  2. तीसरा दृष्टिकोण मैंने कोशिश की marhsalling है: पहले दृष्टिकोण मैंने कोशिश की सरणी

    tt2.patients = tt.urls.patients 
    tt2.doctors = tt.segments.doctors 
    tt2.hospitals = tt.pixels.hospitals 
    
  3. दूसरा दृष्टिकोण मैंने कोशिश की सरणी जो वास्तव में सरणी क्लोनिंग रूप में ही है डुप्लिकेट कर रही है क्लोनिंग कर रहा है। ऊपर एक से दूसरे सरणी से गहरी प्रतिलिपि बनाने के लिए काम करता है के

    tt2.patients = Marshal.load(Marshal.dump(tt.patients)) 
    tt2.doctors = Marshal.load(Marshal.dump(tt.doctors)) 
    tt2.hospitals = Marshal.load(Marshal.dump(tt.hospitals)) 
    

कोई नहीं। व्यक्तिगत रूप से ऊपर प्रत्येक दृष्टिकोण की कोशिश करने के बाद, पहली वस्तु (tt) की सभी सामग्री को निरस्त कर दिया गया है (रोगी, डॉक्टर और अस्पताल चले गए हैं)। क्या आपके पास एक ऑब्जेक्ट की सामग्री को दूसरे पर कॉपी करने पर कोई अन्य विचार है? धन्यवाद।

@bar = @ foo.clone

@ bar.save

+1

आप केवल पहले उदाहरण में अपने चर सेट कर रहे हैं। इसके बजाय tt2.patients = tt.patiens.clone आज़माएं। – three

उत्तर

5

यह वही है ActiveRecord::Base#clone विधि के लिए है!

@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 
15

आसान:

+0

यह बहुत अच्छा काम करता है। new_tt की सारी जानकारी अब मुझे चाहिए। हालांकि, टीटी 2 (रोगियों, डॉक्टरों, अस्पतालों) की सभी सामग्री जो आपने मुझे ऊपर बताई है उसके बाद चली गई हैं। आप tt2 की सामग्री कैसे रखते हैं? –

+0

वूप्स! मेरे पास एक वाक्य रचनात्मक गलती थी। मैंने ऊपर दिए गए कोड को अपडेट किया है। कोशिश करके देखो। – Trip

+0

इस के बीच क्या अंतर है और उसका दूसरा दृष्टिकोण क्या है? –

2

Ruby Facets रूबी के लिए उपयोगी एक्सटेंशन का एक सेट है और एक deep_clone विधि है कि आप के लिए काम कर सकते हैं नहीं है।