2011-01-18 16 views
11

तो मैं अपने config/database.yml पर एक बाहरी डेटाबेस जोड़ने में सक्षम होना चाहता हूं, फिर उससे एक तालिका का मॉडल करें।रेल बाहरी डेटाबेस कॉल कैसे करें?

क्या यह संभव है? मैं यह समझने में सक्षम नहीं हूं कि कैसे।

"विभिन्न मॉडलों

कनेक्शन आमतौर पर ActiveRecord::Base.connection द्वारा ActiveRecord::Base.establish_connection के माध्यम से बनाया जाता है और प्राप्त किया गया। ActiveRecord::Base से इनहेरिट सभी वर्गों इस कनेक्शन का उपयोग होगा। लेकिन क्या आप भी एक वर्ग विशेष के संबंध स्थापित कर सकते हैं में विभिन्न डेटाबेस के लिए कनेक्शन। उदाहरण के लिए , अगर Course एक ActiveRecord::Base है, लेकिन एक अलग डेटाबेस में रहता है, तो आप सिर्फ यह कह सकते हैं Course.establish_connection और Course और उसके उपवर्गों के सभी बजाय इस कनेक्शन का उपयोग होगा।

यह सुविधा लागू किया गया है एक कनेक्शन रखकर ActiveRecord::Base में पूल जो कक्षा द्वारा अनुक्रमित हैश है। यदि किसी कनेक्शन से अनुरोध किया जाता है, तो कनेक्शन पूल में कनेक्शन मिलने तक पुनर्प्राप्ति_कनेक्शन विधि क्लास-पदानुक्रम तक बढ़ जाएगी। तब

my_external_db: 
    adapter: mysql 
    username: ... 
    .... 

, मॉडल बनाने और इसे बाहरी डाटाबेस

class MyExternalModel < ActiveRecord::Base 
    establish_connection(:my_external_db) 
    set_table_name 'my_external_table' 
end 

उत्तर

16

पहले, database.yml में कनेक्शन जानकारी को परिभाषित उपयोग करना चाहिए: self.table_name

+0

क्या मुझे बाद में कनेक्शन बंद करना होगा? – Kirby

+1

@ किर्बी: मुझे नहीं लगता कि आप ऐसा करना चाहते हैं, या फिर रेलों को करना होगा प्रत्येक अनुरोध के लिए एक नया कनेक्शन खोलें। यहां यह केवल एक बार किया जाता है जब सर्वर बूट होता है। – ryeguy

+0

इसके लिए आपको बहुत बहुत धन्यवाद! अपने रेल ऐप को बाहरी डेटाबेस से जोड़ने के लिए खुद को कोशिश कर रहा था। बहुत उपयोगी। – Vicer

2

set_table_name निकाल दिया जाता है से कनेक्ट है, तो बजाय, आप: "

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