2011-01-20 16 views
6

मैं रेल 2.3.5 और MySQL का उपयोग कर रहा हूं।ActiveRecord पर स्विचिंग स्विच :: स्कीमा

मुझे एक मॉडल टेबलए और एक और मॉडल टेबलबी मिला है। टेबलए पूरी तरह से ठीक है .. लेकिन मुझे टेबलबी के लिए कनेक्शन स्वैप करने की जरूरत है। मैं कहीं और किसी अन्य सर्वर से कनेक्ट कर रहा हूं इसलिए मुझे यह जांचना है कि वह तालिका मौजूद है या नहीं। यदि ऐसा नहीं होता है, तो मैं एक नई तालिका तैयार करूंगा।

TableB.establish_connection(new_database_params) 
unless TableB.table_exists? 
    ActiveRecord::Base.establish_connection(new_database_params) 
    ActiveRecord::Schema.define do 
    create_table :table_bs do |t| 
     t.column :text, :string 
    end 
    end 
    ActiveRecord::Base.establish_connection("#{RAILS_ENV}")  
end 

मैंने देखा कि TableB.establish_connection (new_database_params) मुझे नए सर्वर से जोड़ता है। यह बिल्कुल ठीक है।

जब मैं एक नई तालिका बनाने की कोशिश कर रहा हूं, तो मुझे अभी भी कनेक्शन को स्वैप करने के लिए ActiveRecord :: Base को कॉल करना होगा। ActiveRecord :: Schema पर कनेक्शन स्वैप करने का कोई तरीका है? (Model.establish_connection के समान?)

+0

क्या आपको इस के लिए कोई जवाब मिला? मैं बिल्कुल वही चीज़ हासिल करने की कोशिश कर रहा हूं। –

उत्तर

8

संकल्पनात्मक रूप से मुझे बिल्कुल वही समस्या थी। मैं ActiveRecord :: बेस को उपclass करना चाहता था और उस कनेक्शन के लिए एक स्कीमा बनाना चाहता था। मुझे समझने में काफी समय लगा, और ActiveRecord :: बेस, स्कीमा और माइग्रेशन में डाइविंग के बहुत सारे, लेकिन मुझे एक समाधान मिला जो काम करता है, और यह वास्तव में बहुत आसान है।

हुड के तहत, स्कीमा माइग्रेशन का उप-वर्ग है, और यह आपके द्वारा प्रदान किए गए ब्लॉक पर example_eval को कॉल करता है। इसलिए, हम प्रवासन वर्ग के दायरे में हैं और यह ActiveRecord :: बेस उपवर्ग के कनेक्शन के लिए @connection उदाहरण चर है बदल सकता है, यानि कि

ActiveRecord::Schema.define do 
    @connection = TableB.connection 
    create_table :table_bs do |t| 
    t.column :text, :string 
    end 
end 

मुझे पता है इस सवाल का जवाब शायद एक साल बहुत देर हो चुकी है! लेकिन यह अभी भी किसी के लिए उपयोग किया जा सकता है।

+1

यह बड़े पैमाने पर सहायक था, धन्यवाद! – netmute

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