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.

questionAnswers(1)

yourAnswerToTheQuestion