7

मैं तीन मॉडलों, उन सभी को निम्न संघों होने हैस्थापना एक: has_many: एक belongs_to संघ रूबी पर संघ के माध्यम से ऑन रेल्स

class Model1 < ActiveRecord::Base 
    has_many :model2s 
    has_many :model3s 
end 

class Model2 < ActiveRecord::Base 
    belongs_to :model1 
    has_many :model3s, :through => :model1 # will this work? is there any way around this? 
end 

class Model3 < ActiveRecord::Base 
    belongs_to :model1 
    has_many :model2s, :through => :model1 # will this work? is there any way around this? 
end 

आप टिप्पणी की पाठ में देख सकते हैं, मैं उल्लेख किया है कि मैं क्या जरूरत है ।

उत्तर

6

तुम बस यह

class Model2 < ActiveRecord::Base 
    belongs_to :model1 

    def model3s 
    model1.model3s 
    end 
end 

का उपयोग करने की विधि बनाने या, आप model3s विधि MODEL1 को

class Model2 < ActiveRecord::Base 
    belongs_to :model1 

    delegate :model3s, :to => :model1 

end 
+0

प्रतिनिधिमंडल भाग मुझे यह त्रुटि देता है "प्रतिनिधिमंडल को एक लक्ष्य की आवश्यकता है। अंतिम विकल्प के रूप में कुंजी के लिए एक विकल्प हैश की आपूर्ति करें (उदा। प्रतिनिधि: हैलो,: से =>: ग्रीटर)।" मुझे विधि भाग – Rohit

+0

आज़माएं, पहला तरीका अच्छा कर रहा है और मेरी समस्या हल करता है। लेकिन कृपया प्रतिनिधिमंडल तंत्र में कुछ बदलाव ढूंढें और जवाब संपादित करें। : डी – Rohit

+0

प्रतिनिधि का उपयोग करें: model3s,: to =>: प्रतिनिधि 1 के बजाय model1: model3s,: as =>: model1। : डी मेरे लिए काम करता है – Rohit

0

प्रतिनिधि कर सकते हैं क्यों की कोशिश नहीं:

class Model1 < ActiveRecord::Base 
    has_many :model2s 
    has_many :model3s 
end 

class Model2 < ActiveRecord::Base 
belongs_to :model1 
has_many :model3s, :primary_key => :model1_id, 
         :foreign_key => :model1_id 

end 

class Model3 < ActiveRecord::Base 
    belongs_to :model1 
    has_many :model2s, :primary_key => :model1_id, 
         :foreign_key => :model1_id 
end 

यह होगा मॉडल 1 और मॉडल 3 द्वारा मॉडल 1 और मॉडल 3 में सक्रिय रिकॉर्ड मॉडल 1 में से पूरी तरह से बाहर निकलें और इसे और अधिक कुशल होना चाहिए।

+1

के माध्यम से कर सकते हैं सामान्य मामला यह मॉडल 1 में "has_many" परिभाषाओं से जुड़ी कोई भी स्थिति खो देगा। जैसे यदि मॉडल 1 को 'has_many: model2s, -> {जहां हटाया गया है: false} के साथ परिभाषित किया गया था, तो आप उन अतिरिक्त शर्तों को बिना कुछ अतिरिक्त कोड लिखने के लिए उठाएंगे जो संभवतः नाजुक और/या वर्बोज़ थे। बस ऐसा कुछ जिसके बारे में अवगत होना चाहिए। –

संबंधित मुद्दे