कैसे पता चलता user_idहै कि एक विदेशी कुंजी संदर्भित है user?
रेल खुद नहीं जानती कि user_idयह एक विदेशी कुंजी है user। पहले कमांड में rails generate model Micropost user_id:integerयह केवल एक कॉलम जोड़ता है, user_idहालांकि रेल्स कॉल के उपयोग को नहीं जानता है। आपको मैन्युअल रूप से Micropostमॉडल में लाइन डालने की आवश्यकता है
class Micropost < ActiveRecord::Base
belongs_to :user
end
class User < ActiveRecord::Base
has_many :microposts
end
कीवर्ड belongs_toऔर has_manyइन मॉडलों के बीच संबंध निर्धारित करते हैं और मॉडल के लिए user_idएक विदेशी कुंजी घोषित करते हैं User।
बाद की कमांड मॉडल में rails generate model Micropost user:referencesलाइन जोड़ती है और इसके द्वारा एक विदेशी कुंजी के रूप में घोषित की जाती है।belongs_to :userMicropost
FYI
पूर्व विधियों का उपयोग करके विदेशी कुंजियों की घोषणा करने से केवल रेल्स को मॉडल / तालिकाओं के संबंध के बारे में पता चलता है। डेटाबेस रिश्ते के बारे में अज्ञात है। इसलिए जब आप सॉफ्टवेयर का उपयोग करके ईईआर डायग्राम बनाते हैं, जैसे MySql Workbenchआप पाते हैं कि मॉडलों के बीच कोई रिश्ता नहीं है। निम्नलिखित चित्र में पसंद है

हालाँकि, यदि आप बाद की विधि का उपयोग करते हैं, तो आप पाते हैं कि आप माइग्रेशन फ़ाइल की तरह दिखते हैं:
def change
create_table :microposts do |t|
t.references :user, index: true
t.timestamps null: false
end
add_foreign_key :microposts, :users
अब विदेशी कुंजी डेटाबेस स्तर पर सेट की गई है। और आप उचित EERआरेख उत्पन्न कर सकते हैं ।
