कैसे पता चलता 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 :user
Micropost
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
आरेख उत्पन्न कर सकते हैं ।