Люди,
Хочете переконатися, що я правильно це розумію. І, будь ласка, ігноруйте випадок спадкування тут (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})
Тоді все працює так, як я б зазвичай очікував. Я не думаю, що я коли-небудь бачив, як це відбувається з неполіморфними асоціаціями, і я просто хотів дізнатися, чи це щось специфічне для цього випадку використання чи я потенційно дивлюся на помилку.
Дякуємо за будь-яку допомогу!