2010-09-16 7 views
6

दो तालिकाओं में समान स्तंभों की संख्या अज्ञात है ActiveRecord से मैप किया गया, उदा .:आंशिक रूप से तालिकाओं के बीच एक (सक्रिय) रिकॉर्ड की प्रतिलिपि कैसे करें?

Table A  Table B 
--------- --------- 
    id   id 
    name   name 
    age   email 
    email  is_member 

मैं कैसे (सुंदर ढंग से) प्रतिलिपि Table B के रिकार्ड को Table A के रिकार्ड से सभी समान गुण, id छोड़कर विशेषता कर सकते हैं?

ऊपर उदाहरण सारणी के लिए, name और email फ़ील्ड की प्रतिलिपि बनाई जानी चाहिए।

+0

आप एक स्क्रिप्ट लिखने के लिए करना चाहते हैं कि एक केवल इस एक बार से प्रतियां सभी रिकॉर्ड? या यह ऐसा कुछ है जो हर बार एक नया रिकॉर्ड ए में जोड़ा जाता है? – Mischa

+0

समान कॉलम का गठन क्या होता है? क्या यह वही नाम और डेटा प्रकार है? –

+0

@ कंदडाबोगू समान कॉलम नाम। कॉलम नाम समान – ohho

उत्तर

7

इस प्रयास करें: TableA और TableB

columns = (TableA.column_names & TableB.column_names) - ["id"] 

अब पुनरावृति के बीच स्तंभों की

प्राप्त चौराहे TableA पंक्तियों के माध्यम से और TableB पंक्तियों पैदा करते हैं।

TableB.create(TableA.all(:select => columns.join(",")).map(&:attributes)) 

संपादित करें: एक रिकॉर्ड को कॉपी करना:

table_a_record = TableA.first(:select => columns.join(","), :conditions => [...]) 
TableB.create(table_a_record.attributes) 
+0

thx जैसा है, तो दिनांक प्रकार को समान माना जा सकता है। '.map (&: विशेषताएँ) 'का अर्थ क्या है? संपादित करें: http://stackoverflow.com/questions/1217088/what-does-mapname-mean-in-ruby – ohho

+0

पर पाया गया वर्तमान उत्तर 'TableA' से सभी रिकॉर्ड्स कॉपी करेगा। केवल एक रिकॉर्ड की प्रतिलिपि कैसे करें? – ohho

+1

मेरा जवाब अपडेट किया गया, एक नज़र डालें। –

0

माइगेट 2 टेबल के बीच acitverecord विशेषताओं हैश पर यूनियन फ़ंक्शन का उपयोग करने पर विचार करें। यह एक पूरा जवाब नहीं है, लेकिन मदद मिल सकती है

संबंधित मुद्दे