लोग,ActiveRecord, has_many: के माध्यम से, और बहुरूपी संघों
यकीन है कि मैं सही ढंग से इस बात को समझ बनाना चाहता हूं। और कृपया यहां विरासत के लिए मामले की उपेक्षा करें (SentientBeing), इसके बजाय has_many में polymorphic मॉडल पर ध्यान केंद्रित करने की कोशिश कर रहा है: रिश्तों के माध्यम से। जैसा कि कहा गया है, तो निम्न ...
class Widget < ActiveRecord::Base
has_many :widget_groupings
has_many :people, :through => :widget_groupings, :source => :person, :conditions => "widget_groupings.grouper_type = 'Person'"
has_many :aliens, :through => :widget_groupings, :source => :alien, :conditions => "video_groupings.grouper_type = 'Alien'"
end
class Person < ActiveRecord::Base
has_many :widget_groupings, :as => grouper
has_many :widgets, :through => :widget_groupings
end
class Alien < ActiveRecord::Base
has_many :widget_groupings, :as => grouper
has_many :widgets, :through => :widget_groupings
end
class WidgetGrouping < ActiveRecord::Base
belongs_to :widget
belongs_to :grouper, :polymorphic => true
end
एक आदर्श दुनिया में विचार करते हैं, मैं चाहता हूँ करने के लिए, एक विजेट और एक व्यक्ति को देखते हुए की तरह कुछ कार्य करें:
widget.people << my_person
हालांकि, जब मैं करता हूँ यह, मैंने देखा है कि 'grouper' का 'प्रकार' हमेशा widget_groupings में शून्य है। हालांकि, अगर मैं निम्नलिखित की तरह कुछ करने के लिए:
widget.widget_groupings << WidgetGrouping.new({:widget => self, :person => my_person})
तब सभी काम करता है के रूप में मैं सामान्य रूप से अपेक्षा की होगी। मुझे नहीं लगता कि मैंने कभी यह गैर पॉलिमॉर्फिक एसोसिएशन के साथ देखा है और सिर्फ यह जानना चाहता था कि यह इस उपयोग के मामले में विशिष्ट था या यदि मैं संभावित रूप से एक बग पर देख रहा हूं।
किसी भी मदद के लिए धन्यवाद!
हे भगवान, जो इतनी दर्दनाक रूप से स्पष्ट है, मैं विश्वास नहीं कर सकता कि मैं इस पर सही चमकता हूं। धन्यवाद EmFi! – Cory
कोई समस्या नहीं, मुझे लगता है कि मैंने इसे पहली बार ऐसा करने के तरीके के बारे में एक दिन के लिए परेशान किया था। इससे मदद नहीं मिली कि यह उन पहली चीजों में से एक था जिन्हें मैंने रेल में करने की कोशिश की थी जिसमें ट्यूटोरियल/पुस्तक के बाद शामिल नहीं था। – EmFi
धन्यवाद EmFi। – jdl