ActiveRecord, has_many: through, Associações polimórficas com STI
EmActiveRecord, has_many: through e associações polimórficas, o exemplo do OP solicita ignorar a possível superclasse deAlien
ePerson
(SentientBeing
). É aqui que está minha pergunta.
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
Neste exemplo modificado, ogrouper_type
valor paraAlien
ePerson
agora são armazenados pelo Rails comoSentientBeing
(O Rails procura a classe base para estegrouper_type
valor.
Qual é a maneira correta de modificar ohas_many
'pecadoWidget
para filtrar por tipo nesse caso? Eu quero poder fazerWidget.find(n).people
eWidget.find(n).aliens
, mas atualmente esses dois métodos(.people
e.aliens
) retornar conjunto vazio[]
Porquegrouper_type
é sempreSentientBeing
.