2011-01-19 8 views
6

जब मैं माइग्रेशन में references :foo का उपयोग करता हूं, तो उत्पन्न होने वाले कॉलम को foo_id कहा जाता है। क्या वास्तव में references :foo करने और integer :foo_id करने के बीच कोई अंतर है? शायद डेटाबेस स्तर पर रिश्ते को लागू करने के लिए हुड के नीचे कुछ चल रहा है?रेल: 'संदर्भ: foo' और 'integer: foo_id' के बीच कोई अंतर है?

उत्तर

8

परिणाम आपके विशिष्ट मामले के लिए समान है; तुम सही हो। लेकिन references:polymorphic => true विकल्प के लिए अनुमति देता है जो तालिका में स्ट्रिंग के रूप में स्वचालित रूप से foo_type कॉलम बना देगा।

अर्थात्, references बेहतर है यदि आप अपने माइग्रेशन डेटाबेस में तालिकाओं के बीच संबंधों को बेहतर ढंग से प्रतिबिंबित करने का प्रयास कर रहे हैं।

2

@ माइक का जवाब अच्छी तरह से references का अर्थ बताता है। हालांकि, यह अक्सर बेहतर होता है कि आपके एआर एसोसिएशन के लिए आपके माइग्रेशन को बहुत करीबी न करें। विशेष रूप से, यदि आप ऐप को संस्करण नियंत्रण से अपडेट करने से पहले अपने माइग्रेशन चलाते हैं, तो आप अपने ऐप को तैनात करने के लिए सभी प्रकार के अचार में जा सकते हैं। जब तक यह आपको काटता है तब तक यह एक बड़ा सौदा नहीं है :-)

+0

तो क्या आप सुझाव दे रहे हैं कि संदर्भ खतरनाक हो सकते हैं? क्या आप इसका उदाहरण दे सकते हैं कि यह किस प्रकार का अचार मुझे प्राप्त कर सकता है? – kdt

+1

आमतौर पर यह समस्याएं पैदा कर सकता है यदि आपके माइग्रेशन और मॉडल-कोड अपडेट समान संस्करण नियंत्रण प्रतिबद्धता में नहीं हैं, या उदाहरण के लिए यदि आप बाद में एसोसिएशन के बारे में अपना मन बदलते हैं और उस मशीन को अपडेट करने की आवश्यकता है जो वक्र के पीछे बहुत दूर है आपका विकास तो आपके पास माइग्रेशन 1 होगा जो 'संदर्भ' का उपयोग करता है और इसलिए एआर मॉडल एसोसिएशन से विदेशी कुंजी नाम निर्धारित करता है। बाद में आप उस नए माइग्रेशन को पूर्ववत करने का निर्णय लेते हैं और अपने कोड से एसोसिएशन को भी हटा देते हैं। अब, कोई भी मशीन जिसका स्कीमा 2 पीढ़ी पुराना है, माइग्रेशन नहीं चला सकता क्योंकि एसोसिएशन चला गया है। – noodl

+0

मुझे पता है कि यह तरह का संकलित है। मुझे इसके बारे में चिंता नहीं करनी चाहिए जब तक कि यह वास्तव में आपको दर्द न पहुंचाए :-) – noodl

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