2013-06-18 10 views
5

मैंने अपने रेल अनुप्रयोग के लिए दो अलग-अलग डेटाबेस का उपयोग किया है: MongoDB और MsSQL क्रमशः Mongoid और activerecord-sqlserver-adapter एडाप्टर का उपयोग कर। सब कुछ ठीक है लेकिन मॉडल उत्पन्न करते समय एक समस्या है।दो अलग-अलग डेटाबेस के साथ रेल

समस्या यह है कि "मैं MongoDB या MsSQL से अलग मॉडल कैसे उत्पन्न कर सकता हूं?"

उदाहरण के लिए: मैं उत्पन्न करने के लिए People मॉडल MongoID और MsSQL साथ Animal मॉडल से संबंधित है चाहता हूँ। जबकि मैं कमांड के साथ उत्पन्न करता हूं: rails g model Animal name:string यह मोन्गॉयड से संबंधित मॉडल उत्पन्न करता है। मैं ActiveRecord के साथ पशु मॉडल कैसे उत्पन्न कर सकता हूं जिसका अर्थ है एमएसएसक्यूएल से संबंधित है।
कृपया मेरी मदद करें। जब चल

आप 2 डेटाबेस और मॉडल/माइग्रेशन की एक श्रृंखला है एक तरह से उपयोग करने के लिए रेल जो डेटाबेस बताने के लिए है, और आप चाहते हैं: धन्यवाद

उत्तर

1

सबसे पहले मुझे बस जाँच लें कि मैं सही ढंग से अपने प्रश्न समझ लिया जाने माइग्रेशन और आपके मॉडल का उपयोग कर डेटाबेस तक पहुंचना?

यदि मैं सही क्षेत्र में हूं तो आपको अपने माइग्रेशन में एक विधि जोड़ने की आवश्यकता है जो डिफ़ॉल्ट connection() विधि ActiveRecord::Migration में विधि को ओवरराइड करता है।

def connection 
    ActiveRecord::Base.establish_connection(:conn_name).connection 
end 

कहाँ :conn_name नाम आप config में अपनी कनेक्शन सेटिंग दे दी है/database.yml

अपने मॉडल के भीतर

अपने मॉडल फ़ाइल के शीर्ष और मॉडल के लिए लाइन

establish_connection :conn_name 

जोड़ने अब पता चलेगा कि किस डीबी से कनेक्ट होना है।

3

मेरा मानना ​​है कि पर Using Active Record generators after Mongoid installation? आधार पर यह काम करना चाहिए:

rails g active_record:model Animal name:string 
+0

यह कहता है: जेनरेटर सक्रियरेकॉर्ड नहीं मिला: मॉडल। –

+0

क्षमा करें, एक टाइपो था: 'रेल जी सक्रिय_रेकॉर्ड: मॉडल पशु नाम: स्ट्रिंग' काम करना चाहिए – pmoreira

0

तो त्वरित और गंदी तरह से है कि मैं (मेरे देव टीम विरासत कारणों के लिए मणि फ़ाइल में mongoid रखने के कारण) अतीत में इस संभाला है जब आप माइग्रेशन को बंडल चलाते हैं, तो उत्पन्न करते हैं और आपको माइग्रेशन चलाते हैं तो असंगतता और फिर बंडल चलाते हैं। यह सर्वोत्तम प्रथाओं से बहुत दूर है लेकिन इसे काम करना चाहिए।

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