9

मैं एसटीआई और belong_to/has_many रिश्तों के साथ खेल रहा हूं और मैं थोड़ा उलझन में हूं।रेल प्रश्न: एसटीआई के साथ संबंधित_ - मैं इसे सही तरीके से कैसे कर सकता हूं?

class Parental < ActiveRecord::Base 
end 

class Mother < Parental 
    has_many :babies 
end 

class Father < Parental 
    has_many :babies 
end 

class Baby < ActiveRecord::Base 
    belongs_to :?????? 
end 
  1. क्या करना चाहिए Baby belong_to:

    मैं एक मॉडल विन्यास के लिए इसी तरह के आधार पर कुछ प्रश्न हैं?

  2. माइग्रेशन के मामले में, मुझे babies तालिका पर विदेशी कुंजी के लिए क्या नाम/जोड़ना चाहिए?
  3. मुझे यह शोध करने में कठिनाई हुई है, क्या कोई निश्चित स्रोत है जो यह समझाता है? एपीआई दस्तावेज़ इसे पर हिट नहीं लग रहे थे या मैंने इसे याद किया (जो पूरी तरह से संभव है)।

    • हिट्स self.parental
    • के माता पिता का प्रकार निर्धारित करता है
    • रिटर्न का सही प्रकार:

मेरी पहली सोचा एक विधि के साथ babies को parental_id जोड़ने Baby#owner की तरह है जो निम्न करता है माता-पिता (एक मां हो सकती है, एक पिता हो सकती है)

था एनके आप!

उत्तर

7

Baby दोनों Mother और Father

belongs_to :mother 
belongs_to :father 

आप एक से अधिक विदेशी कुंजी हो सकता है के अंतर्गत आता है। Baby डीबी तालिका तो दो क्षेत्रों, mother_id और father_id

है संघों के लिए निश्चित गाइड यहाँ है: http://guides.rubyonrails.org/association_basics.html

प्रवास Baby वर्ग बनाने के लिए कुछ इस तरह दिखेगा:

class CreateBabies < ActiveRecord::Migration 
    def self.up 
    create_table :babies do |t| 
     t.integer :father_id 
     t.integer :mother_id 
    end 
    end 

    def self.down 
    drop_table :babies 
    end 
end 

यह आपको चीजें देता है: baby.mother और baby.father। आपके पास एक parental_id नहीं हो सकता है क्योंकि विदेशी कुंजी केवल एक अन्य रिकॉर्ड को इंगित कर सकती है, जिसका अर्थ है कि बच्चों के पास केवल एक माता-पिता होगा (जब वास्तव में उनके पास दो होते हैं)।

ऐसा लगता है कि इस मामले में, आप केवल रिश्ते को गलत समझ रहे हैं, सब कुछ है। आप सही रास्ते पर हैं।

+0

जवाब देने के लिए धन्यवाद। क्या मैं आपको अपने समाधान @ उस समाधान पर टिप्पणी करने और टिप्पणी करने के लिए परेशान कर सकता हूं?कम टेबल अव्यवस्था की तरह लगता है, लेकिन शायद पूरी तरह से गलत हो सकता है। –

+0

निश्चित रूप से, मैंने 'parental_id' समाधान पर टिप्पणी की, जो काम नहीं करेगा। – jefflunt

+0

एएच! यह पूरी तरह से समझ में आता है। एक बार फिर धन्यवाद। मैंने आपके जवाब को समाधान के रूप में चिह्नित किया। मेरे पास एक फॉलो अप क्यू है जो उम्मीद है कि बहुत परेशान नहीं है। जैसा कि आपने बताया है, इस स्थिति में आपको वास्तव में एक बच्चे के रूप में दो मालिकों की आवश्यकता है (यीशु से अलग) हमेशा दो माता-पिता होंगे। स्वामित्व के तहत ऑब्जेक्ट केवल 1 मालिक से संबंधित होने पर आप क्या करते हैं? उदाहरण के लिए, एक 'पोस्ट' और एसटीआई सेटअप' लेखक ',' लिविंगअधिकर्स <लेखक ',' मृत लेखक <लेखक 'कहें? –

3

मैंने एक स्पष्ट विदेशी_की कॉल जोड़कर खुद को एक ही समस्या हल कर ली है।

कुछ निम्न कोड की तरह:

class Parental < ActiveRecord::Base 
end 

class Mother < Parental 
    has_many :babies 
end 

class Father < Parental 
    has_many :babies 
end 

class Baby < ActiveRecord::Base 
    belongs_to :mother, foreign_key: 'parental_id' 
    belongs_to :father, foreign_key: 'parental_id' 
end 
बेशक

, इस मान लिया गया एक बच्चे को एक ही माता पिता है। :-)