यह आम तौर पर है एक बुरा विचार इस तरह से आपके माइग्रेशन से अपने मॉडल को संदर्भित करने के। समस्या यह है कि माइग्रेशन क्रम में चलते हैं और डेटाबेस स्थिति को बदलते समय बदलते हैं, लेकिन आपके मॉडल बिल्कुल संस्करण नहीं हैं। इस बात की कोई गारंटी नहीं है कि जब माइग्रेशन लिखा गया था तब मॉडल मौजूद था, फिर भी भविष्य में माइग्रेशन कोड के साथ संगत होगा।
उदाहरण के लिए, यदि आप भविष्य में is_active
या is_live
विशेषताओं के व्यवहार को बदलते हैं, तो यह माइग्रेशन टूट सकता है। यह पुराना माइग्रेशन नए मॉडल कोड के खिलाफ पहले चलाने जा रहा है, और असफल हो सकता है। यहां आपके मूल उदाहरण में, यह फसल नहीं हो सकता है, लेकिन जब फ़ील्ड जोड़े गए थे और सत्यापन चल नहीं पाए थे, तो इससे मुझे तैनाती में जला दिया गया है (मुझे पता है कि आपका कोड मान्यताओं को छोड़ रहा है, लेकिन आम तौर पर यह एक चिंता है)।
मेरा पसंदीदा समाधान सादे एसक्यूएल का उपयोग करके इस तरह के सभी माइग्रेशन करना है। ऐसा लगता है कि आप पहले ही इसे मान चुके हैं, इसलिए मुझे लगता है कि आप पहले ही जानते हैं कि वहां क्या करना है।
एक अन्य विकल्प है, अगर आप कुछ बालों व्यापार तर्क है या आप केवल अधिक Railsy देखने के लिए कोड चाहते हैं, के रूप में यह मौजूद माइग्रेशन माइग्रेशन फ़ाइल अपने आप में लिखा है मॉडल के मूल संस्करण शामिल करने के लिए है।आपके मामले में
class Group < ActiveRecord::Base
end
, कि अकेले शायद गारंटी नहीं है कि मॉडल को तोड़ने नहीं होगा पर्याप्त है: उदाहरण के लिए, आप माइग्रेशन फ़ाइल में इस वर्ग डाल सकता है। मान लें कि active
और live
इस समय तालिका में बूलियन फ़ील्ड हैं (और इस तरह जब भी यह माइग्रेशन भविष्य में चलाया जाएगा), आपको किसी और कोड की आवश्यकता नहीं होगी। यदि आपके पास अधिक जटिल व्यावसायिक तर्क था, तो आप इसे मॉडल के इस माइग्रेशन-विशिष्ट संस्करण में शामिल कर सकते हैं।
आप अपने मॉडल से माइग्रेशन संस्करण में पूरी विधियों की प्रतिलिपि बनाने पर भी विचार कर सकते हैं। यदि आप ऐसा करते हैं, तो ध्यान रखें कि आपको अपने ऐप में किसी भी बाहरी मॉडल या पुस्तकालयों का संदर्भ नहीं देना चाहिए, या तो अगर भविष्य में वे कोई मौका बदल जाएंगे। इसमें रत्न शामिल हैं और यहां तक कि संभवतः कुछ मूल रूबी/रेल वर्ग भी हैं, क्योंकि रत्नों में एपीआई-ब्रेकिंग परिवर्तन बहुत आम हैं (मैं आपको देख रहा हूं, रेल 3.0, 3.1, और 3.2!)।
डाउन रिवर्स कुछ ऐसा क्यों करता है जो ऊपर नहीं हुआ? – Robert
यह सिर्फ एक टाइपो है जिसे मैंने यहां संपादित करते समय बनाया है;) – user1404536