フォーク、
これを正しく理解したことを確認したい。そして、ここでの継承のケース(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
完璧な世界では、ウィジェットと人を与えられて、私は次のようなことをしたいと思います:
widget.people << my_person
ただし、これを実行すると、widget_groupingsで「grouper」の「type」が常にnullであることに気付きました。ただし、次のような場合:
widget.widget_groupings << WidgetGrouping.new({:widget => self, :person => my_person})
その後、すべてが通常どおりに機能します。これが多態性のない関連で発生するのを見たことがないと思いますが、これがこのユースケースに固有の何かであるかどうか、またはバグを監視している可能性があるかどうかを知りたいだけです。
助けてくれてありがとう!