folks,
ต้องการให้แน่ใจว่าฉันเข้าใจสิ่งนี้ถูกต้อง และโปรดเพิกเฉยต่อกรณีการสืบทอดที่นี่ (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
อย่างไรก็ตามเมื่อฉันทำเช่นนี้ฉันสังเกตเห็นว่า 'type' ของ 'grouper' นั้นเป็นโมฆะเสมอใน widget_groupings อย่างไรก็ตามหากฉันทำสิ่งต่อไปนี้:
widget.widget_groupings << WidgetGrouping.new({:widget => self, :person => my_person})
จากนั้นทุกอย่างก็ทำงานตามที่ฉันคาดไว้ตามปกติ ฉันไม่คิดว่าฉันเคยเห็นสิ่งนี้เกิดขึ้นกับการเชื่อมโยงที่ไม่ใช่รูปแบบหลายรูปแบบและแค่อยากรู้ว่านี่เป็นสิ่งที่เฉพาะเจาะจงสำหรับกรณีการใช้งานนี้หรือว่าฉันกำลังจ้องมองที่จุดบกพร่อง
ขอบคุณสำหรับความช่วยเหลือ!