2008-11-26 10 views

उत्तर

2

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 
+6

पुरानी पोस्ट है, लेकिन इस मामले में किसी को भी इस देखता है: एक अद्वितीय सूचकांक एक विदेशी कुंजी बाधा के बराबर नहीं है, तो मेरा मानना ​​है कि इस कोड को ओपी के सवाल का जवाब नहीं है। – dsetton

14

यहाँ एक मणि आधारित समाधान है कि जोड़ने और विदेशी कुंजी की कमी को दूर करने के लिए समर्थन शामिल है, SQLite के साथ विफल नहीं है, और schema.rb फाइलों के साथ सही ढंग से काम करता है:

http://github.com/matthuhiggins/foreigner

+0

एफवाईआई, 'विदेशी' SQLite का उपयोग करते समय 'schema.rb' में विदेशी कुंजी उत्पन्न नहीं करता है, क्योंकि SQLite विदेशी कुंजी का समर्थन नहीं करता है। – ashes999

4

यह matthuhiggins-विदेशी मणि के लिए एक अद्यतन है: http://github.com/sparkfly/foreigner

विशेषताएं:

  • rspec कवरेज, PostgreSQL 8.3.9 और MySQL के खिलाफ परीक्षण किया 5.0.90
  • प्रवासन समर्थन
  • schema.rb समर्थन

भावी संस्करण PostgreSQL, जो बहु लागू करने की जरूरत है के लिए जाँच की कमी शामिल होंगे -टेबल विरासत।

+0

धन्यवाद। विदेशी मणि परिवर्तन विधि के साथ अच्छी तरह से काम नहीं करता है, खासकर यदि तालिका पहले नहीं बनाई गई है। यह बहुत अच्छा काम करता है – Sean

+0

आपका स्वागत है। अगर आपको कोई भी बग मिलती है तो मुझे बताएं (जिथूब के माध्यम से)। –

0

क्या यह निम्नलिखित जोड़ने के साथ पर्याप्त होगा, उदाहरण के लिए Products और User मॉडल के साथ?

add_index :products, :user_id

+1

एक इंडेक्स जोड़ना निश्चित रूप से क्वेरी प्रदर्शन के साथ मदद करेगा, लेकिन यह डेटाबेस को विदेशी कुंजी बाधाओं को लागू नहीं करेगा। –