मित्रों,
यह सुनिश्चित करना चाहता हूं कि मैं इसे सही ढंग से समझूं। और कृपया वंशानुक्रम के लिए मामले की उपेक्षा यहाँ (SentientBeing) करें, इसके बजाय has_many में बहुरूपी मॉडल पर ध्यान केंद्रित करने की कोशिश कर रहे हैं: रिश्तों के माध्यम से। उस ने कहा, निम्नलिखित पर विचार करें ...
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
हालाँकि, जब मैं ऐसा करता हूं, मैंने देखा है कि 'ग्रॉपर' का 'प्रकार' हमेशा विजेट_ग्रुपिंग में शून्य होता है। हालाँकि, अगर मुझे निम्नलिखित में से कुछ पसंद है:
widget.widget_groupings << WidgetGrouping.new({:widget => self, :person => my_person})
फिर सभी काम करता है जैसा कि मुझे आमतौर पर उम्मीद थी। मुझे नहीं लगता कि मैंने कभी भी इसे गैर-पॉलीमॉर्फिक संघों के साथ देखा है और यह जानना चाहता हूं कि क्या यह इस उपयोग के मामले में कुछ विशिष्ट था या यदि मैं संभावित रूप से बग को घूर रहा हूं।
किसी भी मदद के लिए धन्यवाद!