民间,
想要确保我正确理解了这一点。并且请忽略此处继承的情况(SentientBeing),而尝试着眼于has_many:through关系中的多态模型。也就是说,请考虑以下事项...
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
在一个完美的世界中,我想给一个小部件和一个Person,执行以下操作:
widget.people << my_person
但是,当我这样做时,我注意到widget_groupings中“ grouper”的“ type”始终为null。但是,如果我执行以下操作:
widget.widget_groupings << WidgetGrouping.new({:widget => self, :person => my_person})
然后所有的工作都像我通常期望的那样。我认为我从未见过这种情况发生在非多态关联中,只是想知道这是否是该用例所特有的,或者我是否有可能盯着一个错误。
谢谢你的帮助!