In ActiveRecord, has_many :through, and Polymorphic Associations, the OP's example requests ignoring the possible superclass of Alien
and Person
(SentientBeing
). This is where my question lies.
class Widget < ActiveRecord::Base
has_many :widget_groupings
has_many :people, :through => :widget_groupings, :source => :person, :source_type => 'Person'
has_many :aliens, :through => :widget_groupings, :source => :alien, :source_type => 'Alien'
end
SentientBeing < ActiveRecord::Base
has_many :widget_groupings, :as => grouper
has_many :widgets, :through => :widget_groupings
end
class Person < SentientBeing
end
class Alien < SentientBeing
end
In this modified example the grouper_type
value for Alien
and Person
are now both stored by Rails as SentientBeing
(Rails seeks out the base class for this grouper_type
value).
What is the proper way to modify the has_many
's in Widget
to filter by type in such a case? I want to be able to do Widget.find(n).people
and Widget.find(n).aliens
, but currently both of these methods (.people
and .aliens
) return empty set []
because grouper_type
is always SentientBeing
.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…