2011-08-20 10 views
5

हमें कुछ नए जोड़े गए टेबलों के लिए हमारे रेल प्रोजेक्ट के "संस्करण 100" में अधिक बीज डेटा जोड़ने की आवश्यकता है।क्या कई बीज.आरबी फाइलें रखने का कोई तरीका है? बीज डेटा के लिए किसी भी प्रकार का 'संस्करण'?

हालांकि, अगर हम इसे केवल बीज.आरबी में जोड़ते हैं और रेक डीबी: बीज कमांड को फिर से चलाते हैं, तो निश्चित रूप से यह मूल बीज डेटा को फिर से जोड़ देगा, इसे डुप्लिकेट कर देगा।

तो यदि आप पहले से ही बीज.आरबी में बीज डेटा जोड़ चुके हैं, तो कहें, टेबलऑन ... हम विकास के बाद के चरणों में टेबलटवो और टेबल थ्री के लिए बीज डेटा कैसे बढ़ा सकते हैं?

मुझे लगता है मैं बस एक नया seeds_two.rb फ़ाइल बनाने और rake db:seeds_two चला सकते हैं आशा व्यक्त की थी लेकिन यह है कि एक त्रुटि Don't know how to build task 'db:seeds_two'

तो यह की तरह ही "seeds.rb" इस्तेमाल किया जा सकता लग रहा है दे दी है - तो कैसे लोगों को बनाए रखने के लिए करते हैं बीज डेटा में वृद्धिशील जोड़ों?

+0

डुप्लीकेट से बचने के लिए आप 'रेक डीबी: रीसेट' क्यों नहीं चला सकते हैं? –

+0

मैं आम तौर पर माइग्रेशन में बीज डेटा जो तालिका जोड़ता है। हालांकि आदर्श नहीं है, लेकिन उचित लगता है। मुझे यह जानने में दिलचस्पी होगी कि स्थिति में अन्य रेल कोडर क्या करते हैं। – rubish

+0

@nash - dnt नहीं करता है: रीसेट हमारे डीबेस को मिटा दें - उदाहरण के लिए, हमारे सभी मौजूदा वास्तविक जीवन ग्राहक डेटा? – jpwynn

उत्तर

10

आप seed कार्य का पुनः उपयोग कर सकते हैं, लेकिन इसे idempotent बनाएं।

बीज बेवकूफ बनाने के लिए, आदेश को निष्पादित करने से पहले बस स्थिति के अस्तित्व की जांच करें। एक उदाहरण: क्या आप एक नया व्यवस्थापक उपयोगकर्ता बनाना चाहते हैं?

User.find_or_create_by_username(:username => "admin") 

User.create(:username => "admin") 

हालांकि, के बजाय seed अपने डेटाबेस को भरने के लिए जब परियोजना बनाई गई है किया जाना चाहिए। यदि आप ऐप के जीवन चक्र को जटिल डेटा बीजिंग डुरिन करना चाहते हैं, तो बस एक नया रेक कार्य बनाएं, इसे निष्पादित करें और फिर इसे हटा दें।

+2

ग्रेट उत्तर, धन्यवाद। इसके अलावा मैंने पार्टियों पर एक अच्छा नया शब्द सीखा है ("मैं चाहता हूं कि एक गर्म धुंध में कैलोरी बेवकूफ हों"); लेकिन मेरे पास एक सवाल है ... आप इस मामले को कैसे संभालेंगे जहां आपकी परियोजना विकसित होती है, आप नए फ़ील्ड जोड़ते हैं और इसलिए उन नए क्षेत्रों में जाने के लिए नए बीज डेटा की आवश्यकता है? रेक? या बीज? – jpwynn

+0

यदि मुझे नए मॉडल को कवर करने के लिए अधिक बीज डेटा की आवश्यकता है, तो मैं seed.rb फ़ाइल का उपयोग करता हूं। अगर मुझे उत्पादन वातावरण में डेटा को पॉप्युलेट या बदलने की ज़रूरत है, तो मैं अस्थायी रेक कार्य करता हूं। –

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

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