रेल पर रूबी में, माइग्रेशन में विदेशी कुंजी बाधा कैसे जोड़ें?रेल में विदेशी कुंजी बाधा के लिए समर्थन
उत्तर
AFAIK, इसके लिए कोई अंतर्निहित समर्थन नहीं है, लेकिन several plugins हैं जो आपकी सहायता करते हैं। आप उन्हें अपनी माइग्रेशन फ़ाइलों में मैन्युअल रूप से भी जोड़ सकते हैं, बस इसके लिए निष्पादन विधि का उपयोग करें, उदा। (रेल एपीआई से नमूना):
class MakeJoinUnique < ActiveRecord::Migration
def self.up
execute "ALTER TABLE `pages_linked_pages` ADD UNIQUE `page_id_linked_page_id` (`page_id`,`linked_page_id`)"
end
def self.down
execute "ALTER TABLE `pages_linked_pages` DROP INDEX `page_id_linked_page_id`"
end
end
यहाँ एक मणि आधारित समाधान है कि जोड़ने और विदेशी कुंजी की कमी को दूर करने के लिए समर्थन शामिल है, SQLite के साथ विफल नहीं है, और schema.rb फाइलों के साथ सही ढंग से काम करता है:
एफवाईआई, 'विदेशी' SQLite का उपयोग करते समय 'schema.rb' में विदेशी कुंजी उत्पन्न नहीं करता है, क्योंकि SQLite विदेशी कुंजी का समर्थन नहीं करता है। – ashes999
यह matthuhiggins-विदेशी मणि के लिए एक अद्यतन है: http://github.com/sparkfly/foreigner
विशेषताएं:
- rspec कवरेज, PostgreSQL 8.3.9 और MySQL के खिलाफ परीक्षण किया 5.0.90
- प्रवासन समर्थन
- schema.rb समर्थन
भावी संस्करण PostgreSQL, जो बहु लागू करने की जरूरत है के लिए जाँच की कमी शामिल होंगे -टेबल विरासत।
धन्यवाद। विदेशी मणि परिवर्तन विधि के साथ अच्छी तरह से काम नहीं करता है, खासकर यदि तालिका पहले नहीं बनाई गई है। यह बहुत अच्छा काम करता है – Sean
आपका स्वागत है। अगर आपको कोई भी बग मिलती है तो मुझे बताएं (जिथूब के माध्यम से)। –
क्या यह निम्नलिखित जोड़ने के साथ पर्याप्त होगा, उदाहरण के लिए Products
और User
मॉडल के साथ?
add_index :products, :user_id
एक इंडेक्स जोड़ना निश्चित रूप से क्वेरी प्रदर्शन के साथ मदद करेगा, लेकिन यह डेटाबेस को विदेशी कुंजी बाधाओं को लागू नहीं करेगा। –
पुरानी पोस्ट है, लेकिन इस मामले में किसी को भी इस देखता है: एक अद्वितीय सूचकांक एक विदेशी कुंजी बाधा के बराबर नहीं है, तो मेरा मानना है कि इस कोड को ओपी के सवाल का जवाब नहीं है। – dsetton