2011-11-30 23 views
8

अब मैं रेल पर शुरू कर रहा हूं, मैंने मंच में देखा, लेकिन मुझे कुछ भी नहीं मिला जो मेरी समस्या का समाधान कर सके।रेल पर एक टेबल बनाते समय एक विदेशी कुंजी बनाने की आवश्यकता है?

यहां यह जाता है, मेरे पास एक श्रेणी तालिका है, और इसमें केवल कॉलम के लिए नाम है (श्रेणियों में कोई दोहराव नहीं है) इसलिए मैं नाम प्राथमिक कुंजी होना चाहता हूं, तो मेरे पास एक उत्पाद तालिका है जिसका नाम है , main_photo, विवरण और मैं यह कहना चाहूंगा कि किसी उत्पाद में केवल एक श्रेणी है, क्या मुझे उत्पादों में विदेशी कुंजी के रूप में नामित कॉलम जोड़ने की आवश्यकता है?

एक श्रेणी में कई उत्पाद होने का अनुमान है।

फिर श्रेणी मॉडल में मैं कैसे कहूं कि नाम प्राथमिक कुंजी है, और मैं उत्पादों में श्रेणियों और श्रेणी में प्रस्तावित प्राथमिक कुंजी नाम के बीच पत्राचार कैसे कर सकता हूं?

उत्तर

15

सक्रिय रिकॉर्ड में विदेशी कुंजी बाधाओं का उपयोग अक्सर नहीं किया जाता है क्योंकि सक्रिय रिकॉर्ड के पीछे विचारधारा का कहना है कि इस प्रकार का तर्क मॉडल में होना चाहिए और डेटाबेस में नहीं होना चाहिए - डेटाबेस सिर्फ एक गूंगा स्टोर है: http://guides.rubyonrails.org/migrations.html#active-record-and-referential-integrity

रेलवे तरीका आपकी श्रेणियों की तालिका सहित सभी टेबलों पर एक आईडी कॉलम रखना है, और अपनी उत्पाद तालिका में, श्रेणी_आईडी नामक कॉलम है। ध्यान दें कि तालिका के नाम बहुवचन हैं।

फिर अपने मॉडल में आप संस्थाओं और श्रेणी के बीच संबंधों को परिभाषित करते हैं। आलेख A Guide to Active Record Associations पढ़ें और यह आपके सभी प्रश्नों का उत्तर देगा, विशेष रूप से अनुभाग 2.1, 2.2 और 3.3।

+0

लेकिन जब मैं रेलों को मचान उत्पन्न करता हूं श्रेणी का नाम: स्ट्रिंग, क्या यह डिफ़ॉल्ट रूप से आईडी कॉलम नहीं बनाता है? मेरी तालिका में एक आईडी और एक नाम कॉलम होगा .. –

+1

हां, इसे प्रत्येक तालिका में एक आईडी कॉलम जोड़ना चाहिए। लेकिन यह उत्पाद तालिका में कोई श्रेणी_आईडी कॉलम नहीं जोड़ देगा, आपको इसे मैन्युअल रूप से करना होगा। – link664

+1

मेरे उत्तर में पोस्ट किए गए लिंक के माध्यम से पढ़ें, आपके प्रश्नों के सभी उत्तर वहां हैं। – link664

6

आपके डेटाबेस में विदेशी कुंजी रखने के कई वैध कारण हैं। Does Rails need database-level constraints?

मैं Foreigner की सलाह देता हूं यदि आप आसानी से अपने रेल ऐप में विदेशी कुंजी जोड़ना चाहते हैं।