रेल 4.x
आप जब पहले से ही है users
और uploads
टेबल और करना चाहते हैं एक नए संबंध जोड़ने उन दोनों के बीच।
आपको बस इतना करना है: निम्नलिखित कमांड का उपयोग करके एक माइग्रेशन उत्पन्न करें:
rails g migration AddUserToUploads user:references
जो एक माइग्रेशन फ़ाइल बनाएगा:
class AddUserToUploads < ActiveRecord::Migration
def change
add_reference :uploads, :user, index: true
end
end
फिर, उपयोग करके माइग्रेशन चलाएं rake db:migrate
। इस माइग्रेशन में टेबल नाम user_id
का एक नया कॉलम जोड़ने का ख्याल रखा जाएगा uploads
(टेबल में संदर्भित id
कॉलम users
), इसके अलावा नए कॉलम में एक इंडेक्स भी जोड़ा जाएगा।
अद्यतन [रेल 4.2 के लिए]
संदर्भात्मक अखंडता को बनाए रखने के लिए रेल पर भरोसा नहीं किया जा सकता है; संबंधपरक डेटाबेस यहाँ हमारे बचाव में आते हैं। इसका मतलब यह है कि हम डेटाबेस स्तर पर विदेशी प्रमुख बाधाओं को जोड़ सकते हैं और यह सुनिश्चित कर सकते हैं कि डेटाबेस इस सेट को संदर्भित अखंडता का उल्लंघन करने वाले किसी भी ऑपरेशन को अस्वीकार कर देगा। जैसा कि @infoget ने टिप्पणी की, विदेशी कुंजियों (संदर्भात्मक अखंडता) के लिए देशी समर्थन के साथ 4.2 जहाजों की संख्या । यह आवश्यक नहीं है, लेकिन आप विदेशी कुंजी जोड़ना चाहते हैं (क्योंकि यह बहुत उपयोगी है) जो हमने ऊपर बनाया है।
मौजूदा संदर्भ में विदेशी कुंजी जोड़ने के लिए, विदेशी कुंजी जोड़ने के लिए एक नया माइग्रेशन बनाएं:
class AddForeignKeyToUploads < ActiveRecord::Migration
def change
add_foreign_key :uploads, :users
end
end
एक विदेशी कुंजी (रेल 4.2 में) के साथ पूरी तरह से नया संदर्भ बनाने के लिए , निम्नलिखित कमांड का उपयोग करके माइग्रेशन उत्पन्न करें:
rails g migration AddUserToUploads user:references
जो एक माइग्रेशन फ़ाइल बनाएगा:
class AddUserToUploads < ActiveRecord::Migration
def change
add_reference :uploads, :user, index: true
add_foreign_key :uploads, :users
end
end
यह तालिका के user_id
स्तंभ में एक नई विदेशी कुंजी जोड़ देगा uploads
। कुंजी तालिका id
में कॉलम को संदर्भित करती है users
।
नोट: यह एक संदर्भ जोड़ने के अलावा है, इसलिए आपको अभी भी पहले एक संदर्भ बनाने की आवश्यकता है फिर विदेशी कुंजी ( आप एक ही माइग्रेशन या एक अलग प्रवास फ़ाइल में एक विदेशी कुंजी बनाने के लिए चुन सकते हैं )। सक्रिय रिकॉर्ड केवल एकल स्तंभ विदेशी कुंजी का समर्थन करता है और वर्तमान में केवल mysql
, mysql2
और PostgreSQL
एडेप्टर समर्थित हैं। इस तरह के अन्य एडेप्टर के साथ कोशिश मत करो sqlite3
, आदि। पटरियों का संदर्भ लें : आपके संदर्भ के लिए विदेशी कुंजी ।